如何在 django 中防止 XSS 攻击
Posted
技术标签:
【中文标题】如何在 django 中防止 XSS 攻击【英文标题】:How to prevent XSS attack in django 【发布时间】:2020-08-28 12:16:13 【问题描述】:我正在尝试防止 Django 中的 XSS 攻击,可以只在我的 html 文件中使用 body|escape
吗?如何在后端进行一些过滤?
【问题讨论】:
我们需要查看您的实际代码来帮助您防止这种情况。只需 1 个字符即可将安全代码变成易受攻击的东西。 话虽如此,您最好在Information Security 上提出这个问题(假设您添加了相关代码) 【参考方案1】:并非每种情况都具有相同的安全性。如果没有看到您的应用程序和用例以及您使用的 Django 版本,很难给出完整的建议。
如果您使用 Django 的模板系统并确保启用了自动转义(在最近的版本中默认启用),那么您的安全性是 9x%。 Django 提供了一种自动转义机制来停止 XSS:它会自动转义动态插入到模板中的数据。您仍然需要注意一些问题:
插入动态数据的所有属性。做 <img alt="somevar">
而不是 . Django 的自动转义不会覆盖你未加引号的属性值。
插入 CSS(样式标签和属性)或 javascript(脚本块、事件处理程序和 onclick 属性)的数据,您必须使用适用于 CSS 或 Javascript 的转义规则手动转义数据(可能使用Python 端的自定义过滤器)。
数据插入到 URL 属性(href、img src)中,您必须手动验证 URL 以通过根据允许协议的白名单检查协议(例如 https:
、mailto:、 ...但绝不是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【讨论】:
以上是关于如何在 django 中防止 XSS 攻击的主要内容,如果未能解决你的问题,请参考以下文章