laravel防止XSS 安全漏洞攻击安装HTMLPurifie扩展
标签:
laravel
HTMLPurifier for Laravel#
HTMLPurifier for Laravel 是对 HTMLPurifier 针对 Laravel 框架的一个封装。本章节中,我们将使用此扩展包来对用户内容进行过滤。
1. 安装 HTMLPurifier for Laravel#
使用 Composer 安装:
composer require "mews/purifier:~3.3"
安装 mews/purifier 包版本大于 3.3 小于 4.0 的。
2. 配置 HTMLPurifier for Laravel#
命令行下运行
php artisan vendor:publish --provider="Mews\Purifier\PurifierServiceProvider"
请将配置信息替换为以下:
config/purifier.php
<?php
return [
'encoding' => 'UTF-8',
'finalize' => true,
'cachePath' => storage_path('app/purifier'),
'cacheFileMode' => 0755,
'settings' => [
'user_topic_body' => [
'HTML.Doctype' => 'XHTML 1.0 Transitional',
'HTML.Allowed' => 'div,b,strong,i,em,a[href|title],ul,ol,ol[start],li,p[style],br,span[style],img[width|height|alt|src],*[style|class],pre,hr,code,h2,h3,h4,h5,h6,blockquote,del,table,thead,tbody,tr,th,td',
'CSS.AllowedProperties' => 'font,font-size,font-weight,font-style,margin,width,height,font-family,text-decoration,padding-left,color,background-color,text-align',
'AutoFormat.AutoParagraph' => true,
'AutoFormat.RemoveEmpty' => true,
],
],
];配置里的 user_topic_body 是我们为话题内容定制的,配合 clean() 方法使用:
开始过滤#
一切准备就绪,现在我们只需要在数据入库前使用saving 方法进行过滤即可:
app/Observers/TopicObserver.php
<?php
namespace App\Observers;
use App\Models\Topic;
// creating, created, updating, updated, saving,
// saved, deleting, deleted, restoring, restored
class TopicObserver
{
public function saving(Topic $topic)
{
$topic->body = clean($topic->body, 'user_topic_body');
$topic->excerpt = make_excerpt($topic->body);
}
}让我们来测试下效果 输入内容

提交表单后的结果,只剩下正常内容,并且没有弹框:
如下图可以看到

js代码被过滤掉了,至此我们完成了 laravel xss 攻击防御成功过滤掉非法内容




