为什么 Django 允许用户在 CharField 表单中输入 <script>alert("hello")</script> 而不会抛出错误?

How come Django allows user to enter <script>alert("hello")</script> in form CharField without throwing an error?

我是 Django 的新手,在我的 Django 应用程序中,我有一个模型,其中包含有关车辆的基本信息(名称、型号、品牌、年份)。我通过表格添加信息。问题是,如果用户输入 "alert("error")",则表单将允许输入,并将保存为有效输入。因此,当页面刷新时,页面上会有一个警告,该字段现在为空白。如何防止用户在 CharField 中输入 JavaScript?

我在代码库的任何地方都没有 'autoescape off',也没有在 html 中使用 'safe' 关键字。我没有 'def clean' 检查这样的输入,因为我的印象是 Django 会处理这样的注入。提前致谢!

这可以使用 strip_tags() 函数解决

试试这个

from django.utils.html import strip_tags

string_value = "<b>Iam </b> <button>Nancy</button> moree. <span>Thanks</span>"
sanitize_value = strip_tags(string_value)
print(sanitize_value)

注:

如果您正在使用 strip_tags(),那么您应该至少将 Django 更新到 Django 1.6 和 1.7 及更高版本。这是 因为安全专家找到了一种方法,可以在低于 1.6 的 django 版本中绕过 strip_tags。见

source link

方案二:

如果您使用的是 django 模板, 您也可以在您的视图中尝试这个 striptags 模板 filter() .

{{ value|striptags }}

如果值为 "<b>Iam </b> <button>Nancy</button> moree. <span>Thanks</span>"

输出将是“我是 Nancy Moree。谢谢”。

source link

解决方案 3:

您还可以 python 通过 clean() 方法漂白库 source

这是完全有效的输入。但它 不会 导致页面上出现警报 - 因为 Django 会自动转义 output.