我想在django中使用文本样式标签,但我不想成为XSSed

时间:2012-08-29 23:21:55

标签: django xss

在我工作的网站上,用户可以互相发送消息。我希望用户能够使用文本样式的标签,例如< b> ,<我> ,和<你>分别使文字粗体,斜体和下划线。但是,实际上,我不希望与那些<脚本>标签。或者可能是< b>具有鼠标悬停属性。

最简单,最安全的方法是什么?

如果重要的话,我正在使用django和jQuery。

2 个答案:

答案 0 :(得分:3)

不要让标签。而是首先使用其中一种不允许XSS攻击的标记语言supported by Django

答案 1 :(得分:3)

如果您确实想使用HTML标记,则应考虑使用Bleach

>>> evil = "This <script>...</script> is partly <b>evil</b>"
>>> bleach.clean(evil)
u'This &lt;script&gt;...&lt;/script&gt; is partly <b>evil</b>'

使用clean,您可以明确地将要允许的代码列入白名单。通过使用strip,您还可以删除不允许的标记,而不是转义它们:

>>> evil = "This uses <i>i</i> and <b title='hovertext'>b</b> and <em>em</em>"
>>> bleach.clean(evil, tags=["b"], attributes=dict(), strip=True)
u'This uses i and <b>b</b> and em'