Laravel5.*使用Purifier扩展包集成 HTMLPurifier轻松防止XSS跨站攻击
今天我们主要分享在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.php的providers中注册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,
更多相关好文
-
lumen5.5最新发布以及lumen5.5新功能以及初体验 2017-09-15 -
lumen5.*常见问题汇总以及经常遇到的问题 2017-09-15 -
laravel去掉路由中的index.php以及只能访问"/" 或 "index"目录,其他页面全是404的解决方法 2017-09-14 -
Laravel配置和使用SqlServer,以及解决链接sqlsrv出现could not find driver 2017-09-13 -
Laravel 连表查询重复相同字段只显示一个字段的解决办法? 2017-09-13

Laravel模型更新全表如何实现?