Laravel5.*使用Purifier扩展包集成 HTMLPurifier轻松防止XSS跨站攻击

Song2155 次浏览1个评论2017年09月15日

今天我们主要分享在Laravel 5.*中使用mews/purifier扩展包集成HTMLPurifier防止 XSS跨站攻击,我们也知道laravel在安全方面一直也在追求更好,我们在日常的使用中使用{{}}即可轻松防止XSS攻击,但是当我们使用laravel 编写的富文本时(比如文章详情,用户评论等等)我们需要使用{!! !!}让我们的站点解析代码,这时候就需要考虑过滤代码。

HTMLPurifier是基于 PHP 编写的富文本HTML[=过滤器,通常我们可以使用它来防止XSS跨站攻击,更多关于HTMLPurifier的详情请参考HTMLPurifier官网

一、Purifier安装

Purifier 是在Laravel 5.* 中集成 HTMLPurifier 的扩展包,我们可以通过Composer来安装这扩展:

1、使用composer require安装
composer require mews/purifier

推荐使用如上方法安装,他不会更新其他composer包,节约我们的安装时间

2、使用composer update安装

在composer.js的require中添加"mews/purifier": "~2.0"然后执行composer update即可完成安装

{
    "require": {
        "mews/purifier": "~2.0",
    }
}

二、Purifier配置

在上面完成安装后,我们需要在配置文件config/app.phpproviders中注册HTMLPurifier服务提供者:

providers => [
    // ...
    Mews\Purifier\PurifierServiceProvider::class,
]

然后在aliases中注册Purifier门面:

aliases => [
    // ...
    Purifier => Mews\Purifier\Facades\Purifier::class,
]

添加完上面的配置,我们要使用自定义的配置,需要发布配置文件到config目录:

php artisan vendor:publish

会生成config/purifier.php配置文件,内容如下代码所示:

return [
    encoding      => UTF-8,
    finalize      => true,
    cachePath     => storage_path(app/purifier),
    cacheFileMode => 0755,
    settings      => [

    ],

];

三、Purifier的使用

其实使用非常简单,只有一个单一的clean函数,不过要注意,他会直接清楚之间的内容,而不是替换特殊符号。

可以使用辅助函数clean或者使用Purifier门面提供的clean方法:

# 辅助函数
clean(Input::get(inputname));
# 门面提供的clean方法
Purifier::clean(Input::get(inputname));

clean可以传入参数和配置,你可以在应用中进行动态配置,具体查看config/purifier.php文件:

clean(你的内容, array(Attr.EnableID => true));

Purifier::clean(你的内容, array(Attr.EnableID => true));

同时需要预防XSS的内容不光是只能是字符串格式的,比如你想让标题和文章内容都执行clean, 你并不需要执行两次操作,只需要传入一个数组格式即可:

dump($request->msg);
$msg = Purifier::clean(array("msg"=>$request->msg,"title"=>$request->title));
dump($msg);

你会看到如下所示,好的,这就是全部内容了,本文拓展包Github地址


常见问题

  • 在你初次使用Purifier回默认生成一个<p></p>标签,非常方便使用,需要才config/purifier.php中修改参数:
    AutoFormat.AutoParagraph => false,

提交评论

请登录后评论

用户评论

  • Song Song 2021-01-28 09:13:53
    5.5+ 以上版本参考:https://github.com/mewebstudio/Purifier
    0 赞 0 条评论 回复
    评论
    查看更多评论!

更多相关好文