我正在尝试防止 Django 中的 XSS 攻击,是否可以仅在我的 HTML 文件中使用{{ body|escape }}
?如何在后端进行一些过滤?
并非每种情况在安全方面都相同。很难在不看到您的应用程序、用例和您使用的 Django 版本的情况下给出完整的建议。
如果你使用 Django 的模板系统并确保启用了自动转义(在最新版本中默认启用(,你是 9x% 的安全。Django 提供了一种自动转义机制来停止 XSS:它会自动转义动态插入到模板中的数据。您仍然需要注意一些问题:
-
插入动态数据的所有属性。执行
<img alt="{{somevar}}">
而不是 。Django 的自动转义不会覆盖你未引用的属性值。-
插入到 CSS(样式标记和属性(或 Javascript(脚本块、事件处理程序和 onclick 属性(中的数据,您必须使用适用于 CSS 或 Javascript 的转义规则手动转义数据(可能使用 Python 端的自定义过滤器(。
-
插入到 URL 属性(href、img src(中的数据,您必须根据允许的协议白名单(例如
https:
, 邮件收件人:, ...但从来没有javascript:
(。 -
避免从用户输入设置 html 属性。
-
如果您使用mark_safe,请确保您知道自己在做什么,并且数据确实"安全"。
-
总是有更多,但这涵盖了最已知的问题。始终确保参考OWASP以了解不同的XSS攻击以及它们如何应用于您的特定应用程序:
- https://owasp.org/www-community/attacks/xss/
- https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html