我的一位同事最近在开发页面中引入了一个漏洞。这允许用户插入将使用|safe
过滤器执行的30个非转义代码字符。因此,html不安全字符(<
,>
,'
,"
或&
)可以自由插入到页面模板中。
该漏洞存在于表单上的错误消息中,因此它不允许黑客编辑向其他用户显示的内容,只有他自己。我希望通过一个可怕的例子向我的同事展示这种脆弱性的危险。另外,我个人对这种类似漏洞的绝对最坏情况的专业水平感兴趣。我知道在PHP(可能是旧版本)中,这将允许用户回显出服务器文件的内容。此漏洞是否允许我在设置文件中同样显示内容? Django Devs(祝福他们)明智地选择{
即使使用|safe
过滤器也不会被转义。所以它不能用于显示上下文变量。
我自己能够想出的最糟糕的事情就是插入(和执行)位于网络上任何位置的任何JS文件,如果它可能会影响其他用户,那将是可怕的,但它没有&# 39;如果js文件只为黑客自己执行,那么这似乎很糟糕。
答案 0 :(得分:2)
如果可以通过GET参数触发错误消息,那么您可以在受害者点击它时简单地创建一个执行JS的链接。
ie:http://example.com?email=<script>alert(1)</script>
否则,唯一的另一种方式(我能想到)利用这个方法就是在另一个页面上使用一个表单(假设允许这个请求)。
<form name="xssForm" action="http://example.com" method="POST">
<input type="hidden" name="email" value="<script>alert(1)</script>" />
</form>
<script>
document.xssForm.submit();
</script>
第二个选项是CSRF漏洞,您的网站可能存在也可能不存在。
假设此漏洞仅影响攻击者本身,我认为可以说此实现存在最小(如果有)风险,但所有输出都应作为标准进行转义。无需夸大特定漏洞的风险。