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,
更多相关好文
-
laravel中distinct()的使用方法与去重 2017-09-11
-
Laravel将view缓存为静态html,laravel页面静态缓存 2021-10-09
-
[ laravel爬虫实战--基础篇 ] guzzle描述与安装 2017-11-01
-
[ 配置教程 ] 在ubuntu16.04中部署LNMP环境(php7+maridb且开启maridb远程以及nginx多域名访问 )并配置laravel环境 2017-07-18
-
mysql如何给运营人员添加只有查询权限的账号 2024-12-02
热门文章
-
mysql如何给运营人员添加只有查询权限的账号 2024-12-02
-
Mac 安装mysql并且配置密码 2024-11-20
-
阿里云不同账号(跨账号)ECS服务器同地域如何实现免费内网互通? 2024-11-12
-
electron安装使用better-sqlite3并解决NODE_MODULE_VERSION xxx. This version of Node.js requires 2024-11-06
-
Zerotier+Moon+Nginx实现内网穿透搭建网站 2024-08-23
Laravel模型更新全表如何实现?