htmlpurifier的优点,而不是正则表达式过滤

时间:2010-08-05 04:46:37

标签: php security htmlpurifier

我们最近在基于网络的应用程序中实现了htmlpurifier。之前我们曾经使用正则表达式来匹配常见的XSS注入(脚本,img等)。我们意识到这不够好,因此转移到htmlpurifier。现在假设htmlpurifier的工作速度很慢(与我们之前使用的正则表达式方法相比非常慢),是否真的值得拥有htmlpurifier?或者,在我们达到令人满意的水平之前继续增加正则表达式过滤是否有任何意义(可能有人认为速度效益在那个时候将无效)。其他任何人在Web应用程序中遇到类似的安全问题,最后你做了什么?

如果看似含糊不清,请告诉我们;我很乐意提供更多细节。

3 个答案:

答案 0 :(得分:2)

正则表达式的问题在于,过滤HTML过于复杂,无法轻松地或优雅地使用正则表达式而不会造成大麻烦。

你需要构建一些实际上理解HTML的东西,并且可以将它作为HTML进行操作,并且知道浏览器将如何解释某些内容。正则表达式就像它只是一个很长的字符串一样。它们在以有状态的方式解析HTML时并不优雅或优雅,例如,识别当前匹配在注释内,或在属性内,或在元素内等。在正则表达式中模拟它真的很复杂。

另一个问题是“匹配常见的XSS注射”比听起来更复杂。如果不是,那你做得不对。您的过滤器需要知道HTML,它需要知道什么是有效的URL方案以及空字节如何在HTML的不同部分中起作用等。基本上,例如,XSS备忘单上的大多数注入都是基于过滤过滤由基于正则表达式的过滤器完成。

还有一件事是,HTML净化器由知道他们正在做什么的人维护。你可以相信它,你可以相信,如果它有一个新的缺陷,它将被修补。这可以为您节省大量的工作,试图自己做同样的事情,并确保您与所有不同的补丁保持同步。

答案 1 :(得分:2)

使用hge / javascript的正则表达式?也许你还没有看到这个epic answer by Mr Bobice。简而言之,如果你使用正则表达式,那么你有two problems。事实上,HTML Purifier之所以如此慢,是因为它使用了数百次调用preg_match()preg_repalce()来清理消息。你绝不能重新发明风团,毫无疑问会不那么安全。

真正的问题是htmlspeicalchars($var,ENT_QUOTES); vs HTML Purifier。 HTML Purifer不仅速度慢,而且是hacked, many times。除非没有其他选择,否则不要使用HTML Purifier,htmlspeicalchars解决了大多数问题,并以无法绕过的方式解决问题。

答案 2 :(得分:1)

安全比抱歉更好。你的正则表达式可能找不到一大堆攻击。例如,here's just a few。如果HTML Purifier太慢,请查看缓存纯化的HTML是否有帮助。

相关问题