在我工作的网站上,用户可能互相发送消息。我希望用户能够使用文本样式标记,例如< b>,< i>和< u>分别使文本变为粗体,斜体和下划线。但是,事实上,我不想用这些<脚本>标签进行XSS处理。或者也许是带有mouseover属性的< b>。我想在django中使用文本样式的标签,但我不想被XSSed
什么是最简单和最安全的方法呢?
我使用django和jQuery,如果重要的话。
在我工作的网站上,用户可能互相发送消息。我希望用户能够使用文本样式标记,例如< b>,< i>和< u>分别使文本变为粗体,斜体和下划线。但是,事实上,我不想用这些<脚本>标签进行XSS处理。或者也许是带有mouseover属性的< b>。我想在django中使用文本样式的标签,但我不想被XSSed
什么是最简单和最安全的方法呢?
我使用django和jQuery,如果重要的话。
如果你真的想使用HTML标签,你应该考虑使用Bleach。
>>> evil = "This <script>...</script> is partly <b>evil</b>"
>>> bleach.clean(evil)
u'This <script>...</script> 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'
不允许标签。而是使用其中一种标记语言supported by Django,它们首先不允许XSS攻击。
谢谢。超级干净而智能的解决方案。 –