Django如何允许用户以CharField形式输入<script> alert(“ hello”)</script>而不会引发错误?

时间:2019-04-10 19:44:59

标签: javascript python django xss

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

我在代码库的任何地方都没有“自动转义”功能,也没有在html中使用“ safe”关键字。我没有“ def clean”检查此类输入,因为我印象中Django将负责此类注入。预先感谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

这可以使用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

解决方案2:

如果您使用的是Django模板, 您还可以在您的视图中尝试使用此剥离标签模板filter()

{{ value|striptags }}

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

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

source link

解决方案3:

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