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

Song • 1207 次浏览 • 1 个回复 • 2017年09月16日

今天我们主要分享在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地址

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

常见问题

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

原创文章,转载请注明 :Laravel5.*使用Purifier扩展包集成 HTMLPurifier轻松防止XSS跨站攻击 - Laravel学习网
原文出处: https://phpartisan.cn/news/28.html
问题交流群 :168117787
提交评论
要回复文章请先登录注册
用户评论
[ 配置教程 ] 在ubuntu16.04中部署LNMP环境(php7+maridb且开启maridb远程以及nginx多域名访问 )并配置laravel环境 laravel将XML转成对象或者数组