在Django中,用户输入不安全的文本有哪些危险?

What are the dangers of unsafe user-inputted text in Django?

本文关键字:文本 危险 不安全 Django 用户 输入      更新时间:2023-09-26

我的一位同事最近向开发中的页面介绍了一个漏洞。这允许用户插入30个字符的未转义代码,这些代码将与|safe过滤器一起执行。所以html不安全字符(<, >, ', "&)可以自由地插入到页面模板中。

该漏洞存在于表单上的错误消息中,因此它不允许黑客编辑显示给其他用户的内容,只能编辑他自己。我想用一个可怕的例子向我的同事展示这种脆弱性的危险。此外,我个人在专业层面上对这种漏洞的最坏情况会是什么很感兴趣。我知道在PHP(可能是旧版本)中,这将允许用户回显服务器文件的内容。这个漏洞是否允许我在设置文件中显示类似的内容?Django开发者(上帝保佑他们)明智地选择了即使使用|safe过滤器,{也不会被转义。因此,它不能用于显示上下文变量。

我自己能想到的最糟糕的是插入(和执行)任何JS文件位于网络上的任何地方,这将是可怕的,如果它可能影响到其他用户,但它似乎没有那么糟糕,如果JS文件只会为黑客自己执行

如果可以通过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漏洞,它可能存在也可能不存在于您的站点上。

假设这个漏洞只影响攻击者自己,我认为可以说这个实现的风险很小(如果有的话),但是所有的输出都应该作为标准进行转义。没有必要夸大特定漏洞的风险。