2021-06-04 10:44:20  3778 0

laravel防止XSS 安全漏洞攻击安装HTMLPurifie扩展

 标签:   

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);
    }
}

让我们来测试下效果 输入内容

image.png


提交表单后的结果,只剩下正常内容,并且没有弹框:

如下图可以看到

image.png

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