在针对反射跨站点脚本类型(https://en.wikipedia.org/wiki/Cross-site_scripting#Reflected_.28non-persistent.29)的漏洞测试Orbeon表单时,我们注意到可以在其中传递带有脚本标记的请求参数,然后可以使用xf:output输出。
当使用xxf:get-request-parameter()或使用xf:output输出请求参数时,Orbeon是否应验证(或至少清理)请求参数以防止出现此类安全漏洞?
我使用最新版本的Orbeon(orbeon-2016.3.201612302139-CE)和Jetty容器进行了测试。 请注意,您不能使用Tomcat,因为它会对请求参数进行自己的验证,而您无法使用Chrome,因为它会为您清理输出(剥离脚本内容)。
一个小样本表格,用于演示:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xh="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:xxf="http://orbeon.org/oxf/xml/xforms">
<head>
<title>Reflected XSS</title>
<xf:model>
<xf:instance id="default">
<root xmlns="">
</root>
</xf:instance>
<xf:var name="testvar" value="xxf:get-request-parameter('test')"/>
</xf:model>
</head>
<body>
<p>This is an example to show that Orbeon is vulnerable to Reflected Cross Site Scripting attacks.</p>
<p>Access this form and pass a request parameter with some javascript like: /?test=bla%00rje1w<script>alert(1)<%2fscript></p>
<p><xf:output value="$testvar"/></p>
</body>
</html>
&#13;
答案 0 :(得分:0)
这结果是与HTML序列化相关的错误。问题现在是fixed。
另外,我们可以更多地考虑是否需要对请求参数进行卫生处理,包括拒绝或删除字符#00
。应该覆盖表单数据本身,因为它来自XML请求,而XML明确禁止此(以及其他一些)字符。