当前位置:  开发笔记 > 编程语言 > 正文

PHP中严格的HTML验证和过滤

如何解决《PHP中严格的HTML验证和过滤》经验,为你挑选了2个好方法。

我正在寻找对用户提交的HTML执行严格(白名单)验证/过滤的最佳实践.

主要目的是过滤掉可能通过网络表单输入的XSS和类似的恶意软件.次要目的是限制非技术用户输入的HTML内容的破坏,例如通过具有HTML视图的WYSIWYG编辑器.

我正在考虑使用HTML Purifier,或者通过使用HTML DOM解析器来完成HTML(脏) - > DOM(脏) - >过滤器 - > DOM(干净) - > HTML(干净)等过程.

您能用这些或任何更简单的策略描述成功吗?有什么陷阱需要注意?



1> Kornel..:

我已经测试了我在HTML Purifier上所知道的所有漏洞并且它做得非常好.它不仅可以过滤HTML,还可以过滤CSS和URL.

一旦你将元素和属性缩小到无辜的元素和属性,陷阱就是属性内容 - javascript:伪URL(IE允许协议名称中的制表符 - java script:仍然有效)和触发JS的CSS属性.

解析URL可能很棘手,例如这些是有效的:http://spoof.com:xxx@evil.com//evil.com.国际化域(IDN)可以用两种方式编写 - Unicode和punycode.

使用HTML Purifier - 它已经完成了大部分工作.如果您只想修复损坏的HTML,请使用HTML Tidy(它可用作PHP扩展).


事实证明,它在2008年远非安全,这些漏洞在2011年被发现:http://secunia.com/advisories/43907/,2010:http://secunia.com/advisories/39613/教训:务必始终更新过滤器安装.

2> Ross..:

用户提交的HTML并不总是有效,或者确实完整.浏览器将解释各种无效的HTML,您应该确保能够捕获它.

还要注意有效的外观:


click

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有