如何在 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 攻击的主要内容,如果未能解决你的问题,请参考以下文章

asp项目中如何防止xss攻击

PHP如何防止XSS攻击

PHP如何防止XSS攻击与XSS攻击原理

如何防止来自 ASP 的 XSS 攻击

前端安全系列之如何防止 XSS 攻击?

前端安全系列:如何防止XSS攻击?