1

在我正在工作的网站上,用户可能会互相发送消息。我希望用户能够使用诸如 < b > 、 < i > 和 < u > 之类的文本样式标签来分别使文本变为粗体、斜体和下划线。但是,事实上,我不想被那些 <script> 标签所影响。或者可能是带有 mouseover 属性的 < b >。

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

如果这很重要,我正在使用 django 和 jQuery。

4

2 回答 2

3

不允许标签。而是使用Django 支持的一种标记语言,它一开始就不允许 XSS 攻击。

于 2012-08-30T01:55:08.357 回答
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'
于 2012-08-30T14:29:15.390 回答