php扩展之HTMLPurifier插件

        XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。

        在php中,通过htmlspecialchars()函数,对用户输入的表单内容进行实体转义过滤,从而防止XSS脚本攻击。

        在ThinkPHP框架中,可以通过create()方法,对用户输入的表单内容进行过滤,从而防止XSS脚本攻击。其中的实质也是利用了htmlspecialchars()函数进行实体转义。

        以上的两种发现都有一定的局限性,create()方法或者是htmlspecialchars()系统函数,都是进行批量的进行实体转义,就是所有的标签全都实体转义,但是有些时候我们应用富文本编辑器进行的样式操作不应该进行实体转义,下面我们就使用HTMLPurifier插件防止XSS脚本攻击。


        ThinkPHP框架中引用

  1. 首先去下载HTMLPurifier插件,我们只使用其中的核心文件library即可。冷暖自知一抹茶ck

2、library目录复制到 Thinkphp\Library\Vendor\下,并重命名Htmlpurfier,HTMLPurifier.auto.php重命名为HTMLPurifierAuto.php。

冷暖自知一抹茶ck

3、新建Application\Common\Common\function.php文件,封装一个xss_clear公用函数定义的函数可以在任意位置调用。

//防止xss攻击的特殊方法
function xss_clear($string){
    Vendor('Htmlpurifier.HTMLPurifierAuto');
    //生成配置对象
    $cfg = HTMLPurifier_Config::createDefault();
    //以下就是配置
    $cfg->set('Core.Encoding','UTF-8');
    //设置允许使用的html标签
    $cfg->set('HTML.Allowed','div,b,p,strong,i,em,a[href|title],ul,ol,li,br,span[style],img[width|height|alt|src]');
    //设置允许出现的css样式属性
    $cfg->set('CSS.AllowedProperties','font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align');
    //设置a标签上是否允许使用target="_blank"
    $cfg->set('HTML.TargetBlank',TRUE);
    //使用配置生成过滤用的对象
    $obj = new HTMLPurifier($cfg);
    //过滤字符串
    return $obj->purify($string);
}

4、在收集表单信息的时候,调用上面定义的fanXSS()函数,对其进行特定标签的进行过滤。简单示例:

冷暖自知一抹茶ck

5、对指定允许的标签会保留,对不允许的标签和标签内容一起进行删除。

冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论