替代html净化器

时间:2010-10-28 22:29:49

标签: php

我想接受来自用户的html输入并将其发布到我的网站上也希望确保它不会因为脏HTML代码而导致我的网站模板出现问题。

我过去使用的是html净化器,但Html净化器无法在我的服务器上运行。所以我正在寻找最好的选择。 这纯粹是用PHP编写的。  这可以修复像

这样的脏HTML代码
</div> it is dirty code as div is closed without opening. 

4 个答案:

答案 0 :(得分:4)

您可以尝试PHP Tidy,这是PHP中的Tidy库。

答案 1 :(得分:4)

没有第三方库的简单解决方案:使用您的输入创建DOMDocument并在其上调用loadHTML。如果您只解析一个小片段,请使用<html><body>标记包围输入。你可能也想要抑制警告,因为你会让他们为常见的坏HTML而吐出来。

然后简单地遍历生成的文档树,删除未包含在已知良好列表中的任何元素和属性。您还应该检查允许的URL属性,以确保它们使用已知良好的方案,如http:,而不是像javascript:这样的潜在麻烦的方案。如果你想加倍努力,你可以检查只有允许的元素组合是否相互嵌套(这比你允许的元素数量更少更容易)。

最后,使用saveHTML再次序列化代码段的节点。因为您正在从DOM创建新的标记,而不是维护原始的可能格式错误的标记,这就是您要阻止的一整类奇数标记注入技术。

答案 2 :(得分:0)

我相信Tidy会帮助关闭你的标签,但它不像HTML Purifier那样全面,它可以删除有效但不需要的标签或属性(即JavaScript onclick事件,那种事情)。

请注意,Tidy要求在您的服务器上安装libtidy,因此它不仅仅是直接的PHP。

我知道PádraicBrady一直致力于替代Zend Framework的HTML Purifier,尽管我认为它目前只是实验代码

http://framework.zend.com/wiki/pages/viewpage.action?pageId=25002168

http://github.com/padraic/wibble

答案 3 :(得分:0)

也考虑将HTMLaw放在https://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/

从该页面;

use to filter, secure & sanitize HTML in blog comments or forum posts, generate XML- 
compatible feed items from web-page excerpts, convert HTML to XHTML, pretty-print 
HTML, scrape web-pages, reduce spam, remove XSS code, etc.

请注意,Tidy / HTML Tiday不是反XSS解决方案。它是一个清理和修复实用程序,可让您清理HTML,XHTML和XML标记。

HTMLawed是一个55kb的单个php文件,而HTML Purifer是一个3 MB的文件夹。