安全输入和允许一些html标签的最佳方法是什么?

时间:2011-09-11 15:11:38

标签: php security zend-framework filtering xss

很长一段时间,我想知道在某些特定情况下保护输入和允许一些html标签的最佳方法。

典型的情况是管理员想要在xss(例如)上写一篇文章,该文章将存储在数据库中,并将显示给用户。此管理员有机会编写<b>之类的标签来格式化文本,但也可以像<javascript>一样来解释攻击。如果我使用Zend_Filter_StripTags我可以允许管理员在文本中放置无害的html标记,例如<b>,但出于安全原因,我不允许他放置像<javascript>这样的标记。

另一方面,如果我使用Zend_Filter_HtmlEntities我允许管理员安全地编写每个标签,但是当文章显示时,文本没有格式化。最后,如果我在系统显示文章之前使用Zend_Filter_HtmlEntities和解码方法,我对第一种情况也有同样的问题。

有谁知道解决这个问题的最佳方法?

3 个答案:

答案 0 :(得分:3)

使用HTML Purifier

  

HTML Purifier是一个符合标准的HTML过滤器库   用PHP。 HTML Purifier不仅会删除所有恶意代码   (更为人熟知的是XSS)经过全面审核,安全可靠   许可白名单,它还会确保您的文件是
  符合标准,只有通过全面的方式才能实现   了解W3C的规范。

答案 1 :(得分:2)

使用Zend_Filter_HtmlEntities转义所有HTML标记,然后使用Zend_Markup通过BBCode注释提供格式设置。

答案 2 :(得分:0)

使用HTMLPurifier

http://htmlpurifier.org/

它可以清理输入并整理HTML