有没有好的基于PHP的HTML过滤器可用?

有没有好的基于PHP的HTML过滤器可用?,php,html,security,filtering,Php,Html,Security,Filtering,我目前在一个PHP前端的项目中。我们非常关注安全性,因为我们将拥有相当多的用户,并且是黑客的一个有吸引力的目标。我们的用户能够提交HTML格式的内容,以后其他用户可以看到这些内容。这是一个大问题,因为我们很容易受到整个XSS攻击。我们正在尽可能地进行过滤,但攻击向量的种类相当多 因此,我正在搜索基于PHP的HTML清理/过滤解决方案。商业解决方案很好(甚至是首选)。目前我们正在使用一个改进的HTML净化器,但我们对结果不满意 有哪些好的库/工具能够过滤HTML的恶意部分 例如,HTML5意识很好

我目前在一个PHP前端的项目中。我们非常关注安全性,因为我们将拥有相当多的用户,并且是黑客的一个有吸引力的目标。我们的用户能够提交HTML格式的内容,以后其他用户可以看到这些内容。这是一个大问题,因为我们很容易受到整个XSS攻击。我们正在尽可能地进行过滤,但攻击向量的种类相当多

因此,我正在搜索基于PHP的HTML清理/过滤解决方案。商业解决方案很好(甚至是首选)。目前我们正在使用一个改进的HTML净化器,但我们对结果不满意

有哪些好的库/工具能够过滤HTML的恶意部分

例如,HTML5意识很好,一旦它“在野外”可用,它将成为一场安全噩梦

更新: 我们正在深入配置。看起来我们以前使用的旧框架根本没有配置它。现在效果看起来好多了。

效果很好。您可以很容易地指定允许和不允许哪些元素,因此使其“支持HTML5”只需设置一个数组即可

WordPress使用它,所以我想它相当安全;)

我真的可以推荐HTML过滤。事实上wordpress就是这么用的。它是免费和开源的。

HTML净化器项目 就我个人而言,我在这方面取得了很好的成绩

它是高度可定制的,并且有一个庞大的代码库。唯一的问题是将文件上载到服务器

您确定您的安装没有出现配置问题吗?因为如果配置正确,净化器不应该让任何HTML标签通过

来自网站:

HTML净化器是符合标准的 用PHP编写的HTML过滤器库。 HTML净化器不仅会删除所有 恶意代码(更好地称为 XSS)经过彻底审核,
安全但允许的白名单,它 还将确保您的文档 符合标准,仅此而已 可通过全面的 了解W3C规范。
厌倦了使用BBCode,因为 缺乏或
不安全的HTML过滤器?有一个
所见即所得编辑器,但从未能够 使用它?寻找高质量的, 标准兼容、开源 该应用程序的组件 你在建房子?HTML净化器是为 你

我在这里写了一篇关于如何使用的文章

也许再尝试一次会有所帮助:

// load the config and overide defaults as necessary
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML', 'Doctype', 'XHTML 1.0 Transitional');
$config->set('HTML', 'AllowedElements', 'a,em,blockquote,p,strong,pre,code');
$config->set('HTML', 'AllowedAttributes', 'a.href,a.title');
$config->set('HTML', 'TidyLevel', 'light'); 

有一个优秀的XSS过滤器,如果您想将其作为一个独立的函数,可以将其从system/libraries/Input.php文件中删除。

您可以使用当前的解决方案并添加具有不同基本URL的iFrame来显示内容。更改iframe上的基本URL将禁用从内部JavaScript代码到主页的访问。也就是说,如果您的URL是 您可以在iframe中使用它来显示内容,例如:http//yoururl.com/thread/500/coment/1、http//yoururl.com/thread/500/coment/2

可以设置的基本URL取决于DNS/主机配置


这不是一个解决问题的方法,而是跳过它,尽管它在你找到其他东西之前是有用的。

我以前使用过这个类,并取得了相当不错的成功:

HTMLPurifier可能有效,但我要说的是,文件夹结构过于复杂和浮夸。数百行评论,一个名为“测试”的文件夹,一个许可证文件,读取mes和信息文件,图像,另一个用于smoketesting的文件夹(这是彻头彻尾的滥用),附加,配置,基准测试,最重要的是,大约10种不同的CMS兼容模式,他们网站上的推荐信,完整版本,精简版本,哈士奇,稍微胖,唐氏综合症和各种政治上正确的编程变体。

您是否有可能使用简化的标记语言(如stackoverflow与Markdown一起使用)来决定实际显示的标记?此外,我认为事实上,该问题有6票赞成,而5个答案中的任何一个都没有投票(现在),强调了HTML过滤方法无法很好地解决这个问题的观点。我们赞成使用一些简化的“标记”语言,但我们无法控制所有可能的进入渠道,一些客户将使用能够使用html或纯文本的软件,说服他们和我们这边的一些利益相关者这是一种可用方法的机会非常小:-(请注意,OP确实说:“目前我们正在使用一个改进的html净化器,但我们对结果不满意。"奇怪的是,HTML净化器不适用于询问者。我认为配置在某个点上设置错误。我们可以通过进一步配置来解决一些问题,但是我们的渗透人员绕过了它。目前HTML净化器是我们最好的选择,但我希望找到另一个亮点这里的解决方案;-)由于一些限制,这不是一个真正的选项。抱歉:)看起来它不再被维护。上一个版本是2005年,有许多新的漏洞很可能不在本版本中。html 5将有点棘手,因为它将引入关闭标记等属性。作者在sourceforge页面上声明,他没有时间维护包,这是一个交易破坏者:-/但它没有积极维护:-(嗯,我担心这不符合我们对“外来”代码的非功能性要求。从另一个框架中删除代码可能会受到PM的欢迎;-)