我想接受来自用户的html输入并将其发布到我的网站上也希望确保它不会因为脏HTML代码而导致我的网站模板出现问题。
我过去使用的是html净化器,但Html净化器无法在我的服务器上运行。所以我正在寻找最好的选择。 这纯粹是用PHP编写的。 这可以修复像
这样的脏HTML代码</div> it is dirty code as div is closed without opening.
答案 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
答案 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的文件夹。