2010-12-05 92 views

回答

2

消毒HTML是一个相当困难的问题得到正确的。垃圾邮件发送者和其他讨厌的人总是想出通过卫生来走私HTML的新方法。最安全的选择是定义一个无害标签的白名单,并用真正的HTML解析器严格过滤掉所有其他标签(带正则表达式的而不是)。

djangosnippets.com上有几个模板标签和过滤器,例如, thisthis one。选择过滤器时,请注意它使用白名单和HTML解析器,如lxml.html(最好是lxml.html.clean)或BeautifulSoup

1

要显示所有HTML(不逃逸的),你可以使用safe过滤

{{ var|safe }} 

在你的情况,如果你想逃避,除了某些标签的一切,你可以写你自己的过滤器,做的是:

{{ var|mysafe }} 

读到它在这里:http://docs.djangoproject.com/en/dev/howto/custom-template-tags/

过滤器的算法可能是:

  1. 都逃不过
  2. 被 允许(通过使用 .replace或 regilar表达式)
  3. UNESCAPE只有那些标签
2

也许更有意义的是配置TinyMCE这种方式,用户只能输入你允许的元素。 TinyMCE有a powerful set of rules。如果您使用的是django-tinymce,请参见this,将TINYMCE_DEFAULT_CONFIG设置为您需要的选项。

+3

恶意的人只需要禁用JavaScript(或者首先使用不解释JavaScript的工具)来避开该障碍。 **从不**仅依靠客户端验证。 TIMEX要求提供安全性,而这根本不提供任何安全性。 – 2010-12-05 17:27:03