在我工作的网站上,用户可以互相发送消息。我希望用户能够使用文本样式的标签,例如< b> ,<我> ,和<你>分别使文字粗体,斜体和下划线。但是,实际上,我不希望与那些<脚本>标签。或者可能是< b>具有鼠标悬停属性。
最简单,最安全的方法是什么?
如果重要的话,我正在使用django和jQuery。
答案 0 :(得分:3)
不要让标签。而是首先使用其中一种不允许XSS攻击的标记语言supported by Django。
答案 1 :(得分:3)
如果您确实想使用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'