2012-08-29 26 views
1

在我工作的网站上,用户可能互相发送消息。我希望用户能够使用文本样式标记,例如< b>,< i>和< u>分别使文本变为粗体,斜体和下划线。但是,事实上,我不想用这些<脚本>标签进行XSS处理。或者也许是带有mouseover属性的< b>。我想在django中使用文本样式的标签,但我不想被XSSed

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

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

回答

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' 
3

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

+0

谢谢。超级干净而智能的解决方案。 –

相关问题