laravel过滤富文本提交的标签(防止XSS等js脚本攻击)

本文介绍如何在 Laravel 项目中安装并配置 HTML Purifier SDK,通过 Composer 添加依赖,并在应用中注册服务提供者及门面。此外,还详细说明了如何通过发布配置文件来定制 Purifier 的行为,包括设置编码、缓存路径等选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.安装sdk
composer require mews/purifier

2.完成后,在配置文件config/app.php的providers中注册HTMLPurifier服务提供者:
'providers' => [
 // ...
 Mews\Purifier\PurifierServiceProvider::class,
]
然后在aliases中注册Purifier门面:
'aliases' => [
 // ...
 'Purifier' => Mews\Purifier\Facades\Purifier::class,
]
3.要使用自定义的配置,发布配置文件到config目录:
php artisan vendor:publish
这样会在config目录下生成一个purifier.php文件:
 return [
        'encoding' => 'utf-8', //编码
        'finalize' => true, //固定
        'cachePath' => '/cache/purifier', //缓存路径
        'cacheFileMode' => 0755,
        'settings' => [
            'default' => [ //默认配置
                'HTML.Trusted' => true, //信任html元素,如form
                'AutoFormat.RemoveEmpty' => true, //移除空
            ],
            'help' => [ //自定义配置
                'HTML.AllowedElements' => 'p,span,img,a,strong,em,hr,br', //在受安全支持元素的范围下定义信任元素
                'CSS.AllowedProperties' => 'background,background-attachment,background-clip,background-color,background-image,background-origin,background-position,background-repeat,background-size,border,border-box,border-bottom,border-bottom-color,border-bottom-left-radius,border-bottom-right-radius,border-bottom-style,border-bottom-width,border-collapse,border-color,border-image,border-image-outset,border-image-repeat,border-image-slice,border-image-source,border-image-width,border-left,border-left-color,border-left-style,border-left-width,border-radius,border-right,border-right-color,border-right-style,border-right-width,border-spacing,border-style,border-top,border-top-color,border-top-left-radius,border-top-right-radius,border-top-style,border-top-width,border-width,box-decoration-break,box-shadow,box-sizing,box-snap,box-suppress,break-after,break-before,break-inside,caption-side,clear,color,color-interpolation-filters,display,display-inside,display-list,display-outside,font,font-family,font-feature-settings,font-kerning,font-language-override,font-size,font-size-adjust,font-stretch,font-style,font-synthesis,font-variant,font-weight,height,letter-spacing,lighting-color,list-style,list-style-image,list-style-position,list-style-type,margin,margin-bottom,margin-left,margin-right,margin-top,max-height,max-lines,max-width,min-height,min-width,padding,padding-bottom,padding-left,padding-right,padding-top,text-align,text-align-last,text-decoration,text-decoration-color,text-decoration-line,text-decoration-skip,text-decoration-style,text-emphasis,text-height,text-indent,text-justify,text-orientation,text-overflow,text-shadow,text-space-collapse,text-transform,text-underline-position,text-wrap,width,word-break,word-spacing,word-wrap,z-index,right,left,top,bottom,cursor,line-break,size',
                'AutoFormat.RemoveEmpty' => true,
            ],
        ],
        'custom_definition' => [//自定义不受支持的元素和属性
            'id' => 'definition_cache_id', //缓存ID、固定
            'rev' => 1,//自增值,固定
            'debug' => false,//false不打开调试,即不缓存
            'elements' => [//自定义元素
                ['section', 'Block', 'Flow', 'Common'],
                ['nav', 'Block', 'Flow', 'Common'],
                ['article', 'Block', 'Flow', 'Common'],
                ['aside', 'Block', 'Flow', 'Common'],
                ['header', 'Block', 'Flow', 'Common'],
                ['footer', 'Block', 'Flow', 'Common'],
                ['address', 'Block', 'Flow', 'Common'],
            ],
            'attributes' => [//自定义属性
                ['table', 'height', 'Text'],
                ['td', 'border', 'Text'],
                ['th', 'border', 'Text'],
                ['tr', 'width', 'Text'],
                ['tr', 'height', 'Text'],
                ['tr', 'border', 'Text'],
            ],
        ],
    ];

三、Purifier的使用

函数

clean($param['title']);

方法

Purifier::clean($param['title']);

clean可以传入参数和配置,你可以在应用中进行动态配置,具体查看config/purifier.php文件:

clean('测试内容', array('Attr.EnableID' => true));
Purifier::clean('测试内容', array('Attr.EnableID' => true));

同时需要预防XSS的内容不光是只能是字符串格式的,比如你想让标题和文章内容都执行clean, 你并不需要执行两次操作,只需要传入一个数组格式即可:

Purifier::clean(['content'=>$param['content'], 'title'=>$param['title']]));

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

'AutoFormat.AutoParagraph' => false,

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值