masterro / laravel-xss-filter
过滤用户输入以防止XSS攻击,但不影响其他HTML
v1.7.0
2024-03-03 23:57 UTC
Requires
- php: >=7.4
- laravel/framework: ^6.20.26|^7.30.6|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^v4.0|^v5.0|^v6.0|^v7.0|^8.0|^9.0
README
Laravel XSS过滤器/清理器
配置一次,忘记XSS攻击!
Laravel 5.4+ 中间件,用于过滤用户输入,防止XSS和iframe以及其他嵌入元素。
它不会删除HTML,只会转义脚本标签和嵌入元素。
然而,默认情况下,它会删除行内事件监听器,例如onclick
。也可以选择转义(在xss-filter.php
配置文件中将escape_inline_listeners
设置为true
)。
例如
<html> <head> <script src="app.js"></script> <script>window.init()</script> <meta name="test" /> <script> let Iframe = new Iframe('#iframe'); </script> <head> <body> <div class="hover" onhover="show()" data-a="b"><p onclick="click"><span class="span" ondblclick="hide()"></span>Aawfawfaw f awf aw </p></div> <iframe id="iframe">Not supported!</iframe> </body> </html>
将转换为
<html> <head> <script src="app.js"></script> <script>window.init()</script> <meta name="test" /> <script> let Iframe = new Iframe('#iframe'); </script> <head> <body> <div class="hover" data-a="b"><p ><span class="span" ></span>Aawfawfaw f awf aw </p></div> <iframe id="iframe">Not supported!</iframe> </body> </html>
这允许根据用户输入在视图中渲染HTML,而不必担心XSS攻击和嵌入元素。
安装
步骤1:Composer
从命令行
composer require masterro/laravel-xss-filter
步骤2:注册服务提供者和外观(可选)(适用于Laravel 5.4)
对于您的Laravel应用程序,打开config/app.php
并在providers
数组中追加
MasterRO\LaravelXSSFilter\XSSFilterServiceProvider::class
在aliases
数组中追加
'XSSCleaner' => MasterRO\LaravelXSSFilter\XSSCleanerFacade::class
步骤3:发布配置(可选)
从命令行
php artisan vendor:publish --provider="MasterRO\LaravelXSSFilter\XSSFilterServiceProvider"
步骤4:中间件
您可以将\MasterRO\LaravelXSSFilter\FilterXSS::class
注册为全局中间件栈、分组中间件栈或特定路由的过滤。
如果您需要帮助,请参阅Laravel的中间件文档。
使用方法
添加中间件后,每个请求都将被过滤。
如果您需要指定不应过滤的属性,请将它们添加到xss-filter.except
配置。默认情况下,过滤器不包括password
和password_confirmation
字段。
如果您想在其他地方(例如控制器)清理一些值,可以使用XSSCleaner
外观。
$clean = XSSCleaner::clean($string);
运行时配置
XSSCleaner::config() ->allowElement('iframe') ->allowMediaHosts(['youtube.com']) ->blockElement('a'); $clean = XSSCleaner::clean($string);