`
willko
  • 浏览: 387072 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用HTML Purifier解决XSS问题

    博客分类:
  • php
阅读更多
在php里解决XSS最简单的方法是使用htmlspecialchars转义xml实体,但对于需要使用xml的时候就搏手无策了。之前一直使用一个叫RemoveXSS的函数,该函数过滤得比较严格,很多html特性都过滤了,而且有bug,不修改代码使用起来很不友好,修改了却无法应对灵活的XSS攻击。

HTML Purifier是基于php 5所编写的HTML过滤器,支持自定义过滤规则,还可以把不标准的HTML转换为标准的HTML,是WYSIWYG编辑器的福音。。

一、使用HTML Purifier的要求
  • php 5+
  • iconv
  • bcmath
  • tidy
二、基本用法
默认下,使用UTF-8编码,和XHTML 1.0 Transitional文档类型.
<?php
require_once 'library/HTMLPurifier.includes.php';

$dirty_html = <<<EOF
<h1>Hello
<script>alert("world");</script>
EOF;

$purifier = new HTMLPurifier();

$cleanHtml = $purifier->purify($dirty_html);

输出:
<h1>Hello
</h1>

三、使用配置
配置主要用于设置规则,使用比较简单
$config = HTMLPurifier_Config::createDefault();
// something....
$purifier = new HTMLPurifier($config);

详细的配置规则:http://htmlpurifier.org/live/configdoc/plain.html

四、属性相关规则
1.id规则
默认下,HTML Purifier是不允许使用id的,可以通过Attr.EnableID选项来控制,当允许使用id的时候,有点需要注意,id只允许全局一个,后面重复的都会被去掉。
$config->set('Attr.EnableID', true); // 允许使用id
$config->set('Attr.IDPrefix', 'test_'); // 给所有id加上前缀test_
$config->set('Attr.IDBlacklist', array( // 设置黑名单,会过滤掉设置的id,如果设置了id前缀,要把前缀也加上
    'test_black_list'
));
$config->set('Attr.IDBlacklistRegexp', '/list_\d+/'); // 黑名单,使用正则匹配

输入:
<a id="test_by_willko" href="aa">adf</a>
<a id="black_list" href="aa">adf</a>
<a id="black_list_2" href="aa">adf</a>

输出:
<a id="test_by_willko" href="aa">adf</a>
<a href="aa">adf</a>
<a href="aa">adf</a>

2.class规则
默认下,是允许所有的class。属性Attr.AllowedClasses用于设置允许的class名,没被设置的class将被拒绝使用。而Attr.ForbiddenClasses则用于设置拒绝使用的class名。
$config->set('Attr.AllowedClasses', array( // 设置允许使用的class名
	'test_by_willko'
));
$config->set('Attr.ForbiddenClasses', array( // 设置拒绝使用的class名
	'ignore'
));

输入:
<p class="test_by_willko">12345</p>
<p class="ignore">78900</p>

输出:
<p class="test_by_willko">12345</p>
<p>78900</p>


四、HTML相关规则
最近,身体不适,待续...

参考资料:
http://htmlpurifier.org/live/INSTALL
http://htmlpurifier.org/docs
分享到:
评论
2 楼 willko 2009-09-24  
lnnujxxy 写道
对于xss我通常使用htmlspecialchars转义过滤即可
不知博主使用这个过滤有什么好处,htmlspecialchars过滤那些不足!

使用这个可以从根本上解决xss问题,缺点是不支持html
1 楼 lnnujxxy 2009-09-24  
对于xss我通常使用htmlspecialchars转义过滤即可
不知博主使用这个过滤有什么好处,htmlspecialchars过滤那些不足!

相关推荐

    Laravel开发-purifier

    此外,对于需要处理任何用户输入HTML的情况,Purifier都是一个可靠的解决方案。 7. **性能考虑**:虽然Purifier提供了强大的安全防护,但处理HTML内容可能会对性能产生一定影响。因此,在高并发或对性能要求极高的...

    Laravel开发-laravel-purifier .zip

    而Laravel Purifier则是Laravel生态系统中的一个扩展,用于过滤和清理HTML及CSS,以防止跨站脚本(XSS)攻击。 首先,我们需要理解XSS攻击的本质。这种攻击方式是通过注入恶意代码到网页上,从而在用户的浏览器上...

    白盒审计下XSS Filter绕过技巧详解及解决方案

    同时提出了多种有效的富文本XSS防护方案,如使用HTML Purifier、UBB代码和Markdown。 适合人群:从事Web应用开发与安全研究人员,尤其是对XSS攻击有一定了解的技术人员。 使用场景及目标:帮助开发者深入了解XSS攻击...

    php_XSS防攻击插件

    使用手册则会详细介绍配置选项、方法调用以及可能遇到的问题和解决方案,是学习和解决问题的重要参考。 总结,PHP的XSS防护是一个重要的安全措施,通过使用如HTMLPurifier这样的库,我们可以有效地避免XSS攻击,...

    Laravel开发-laravel-purifier

    `laravel-purifier` 是一个针对 Laravel 5 的扩展,它集成了 `HTMLPurifier` 库,用于清理和净化用户输入的 HTML,防止跨站脚本(XSS)攻击。这个库的主要目标是确保用户生成的内容不会破坏网站的安全性或结构。 **...

    HTML Purifier-开源

    这个PHP库的出现,主要是为了解决HTML输入的安全问题,特别是防止跨站脚本攻击(XSS)。XSS攻击是通过在网页上注入恶意脚本,从而在用户浏览器中执行,可能危害用户的个人信息安全。 HTML Purifier的工作原理基于一...

    Laravel开发-xss-protection

    XSS攻击允许攻击者在用户的浏览器上执行恶意脚本,可能导致数据泄露、会话劫持或其他安全问题。本篇文章将深入探讨如何在Laravel开发过程中有效实施XSS防护。 一、了解XSS攻击 XSS攻击主要分为三种类型:反射型XSS...

    Laravel5中防止XSS跨站攻击的方法

    Laravel 5本身没有这个能力来防止xss跨站攻击了,但是这它可以使用Purifier 扩展包集成 HTMLPurifier 防止 XSS 跨站攻击。 1、安装 HTMLPurifier 是基于 PHP 编写的富文本 HTML 过滤器,通常我们可以使用它来防止 ...

    cakephp-html-purifier:这是HTML Purifier库的CakePHP包装。 该插件包括一个特征,一个视图助手,一个行为和一个外壳,可以在视图中或模型层中的任意位置清理您的标记,或使用该外壳清理任何表和字段

    HTML Purifier不仅会使用经过全面审核,安全但允许的白名单删除所有恶意代码(更名为XSS),还将确保您的文档符合标准,这只有在全面了解W3C规范的情况下才能实现。 该插件包括一个特征,一个视图助手,一个行为和...

    用PHP编写的符合标准HTML过滤器-PHP开发

    HTML Purifier HTML Purifier是一种HTML过滤解决方案,它使用了强大的白名单和主动解析的独特组合,以确保不仅可以阻止XSS攻击,而且可以确保生成HTML符合标准。HTML Purifier HTML Purifier是一种使用独特HTML过滤...

    php实现XSS安全过滤的方法

    10. 使用现成的安全库:对于复杂的Web应用,建议使用已有的成熟安全库来实现XSS过滤,例如OWASP AntiSamy、HTML Purifier等,这些库经过了安全社区的验证,能够提供更为稳定和全面的保护。 需要注意的是,过滤器并...

    purifier:Django Purifier管理系统

    【标题】"Django Purifier管理系统"是一款基于Python的Web应用程序,主要针对的是内容过滤与净化,特别是对于那些使用Django框架构建的网站。Django是Python领域内一个强大且灵活的Web开发框架,它提供了丰富的功能...

    Laravel开发-purify

    在实际应用中,当你需要净化HTML内容时,可以使用Purifier的门面。例如,假设有一个用户提交的博客内容,你可以在存储前进行净化: ```php use Mews\Purifier\Facades\Purifier; $cleanedContent = Purifier::...

    ASP源码—修补跨站脚本攻击漏洞.zip

    这个"ASP源码—修补跨站脚本攻击漏洞.zip"压缩包文件显然是针对ASP应用的安全性,特别是修复跨站脚本(Cross-Site Scripting, XSS)攻击的解决方案。 跨站脚本攻击是网络安全领域中常见的一种攻击方式,它发生在...

    封装HTMLPurifier的富文本过滤器实现自定义白名单机制

    这个封装可能已经处理了一些常见问题,如性能优化、错误处理和日志记录,使得在实际使用时更加便捷。 总的来说,通过自定义白名单的HTMLPurifier过滤器,我们可以有效地防止XSS攻击,保护用户的浏览器免受恶意脚本...

    htmlpurifier:用PHP编写的符合标准HTML过滤器

    HTML Purifier是一种HTML筛选解决方案,它使用了强大的白名单和主动解析的独特组合,以确保不仅阻止XSS攻击,而且确保生成HTML符合标准。 HTML Purifier面向需要CSS和完整标签集的不受信任来源的格式丰富的文档。 ...

    PHP和XSS跨站攻击的防范

    4. **使用第三方库**:利用成熟的第三方库如OWASP ESAPI或HTML Purifier可以帮助开发者更轻松地实现安全的数据处理和输出。 5. **定期审计与测试**:定期进行安全审计和渗透测试,及时发现并修复潜在的安全漏洞。 ...

    ewebEditor图片的读取.doc

    可以使用HTML Purifier或类似的库来清理和规范化HTML,只保留安全的标签和属性。 总的来说,正确处理EwebEditor图片的读取,需要理解Struts2和EL的差异,以及富文本编辑器生成内容的特点。同时,确保图片URL的正确...

    Parsedown:PHP中更好的markdown解析器-开源

    如果希望在不受信任的用户输入中允许HTML,但仍希望输出不受XSS的影响,建议您使用允许将HTML标签列入白名单HTML清理器,例如HTML Purifier。 在这两种情况下,您都应该强烈考虑采用深度防御措施,例如部署内容安全...

Global site tag (gtag.js) - Google Analytics