protonemedia/ laravel-xss-protection
Laravel XSS 防护,中间件和清理
Requires
- php: ^8.2|^8.3
- graham-campbell/security-core: ^4.0
- illuminate/contracts: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- laravel/pint: ^1.14
- nunomaduro/collision: ^7.0|^8.0
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpunit/phpunit: ^10.4
README
Laravel 中间件,用于防止您的应用程序遭受跨站脚本攻击(XSS)。它通过利用 Security Core 包来清理请求输入,并且还可以清理 Blade echo 语句。
- PHP 8.2 及更高版本
- Laravel 10 及更高版本
赞助我们
❤️ 我们自豪地通过开发 Laravel 扩展包并提供免费使用来支持社区。如果您发现这个包节省了您的时间,或者您在专业上依赖它,请考虑 赞助维护和发展,并查看我们最新的高级包: Inertia Table。跟踪问题和拉取请求需要时间,但我们乐于提供帮助!
安装
您可以通过 composer 安装此包。
composer require protonemedia/laravel-xss-protection
您可以使用以下命令发布配置文件:
php artisan vendor:publish --tag="xss-protection-config"
中间件使用
您可以在处理表单提交的路由中使用 ProtoneMedia\LaravelXssProtection\Middleware\XssCleanInput
中间件。
use App\Http\Controllers\CreateAccountController; use ProtoneMedia\LaravelXssProtection\Middleware\XssCleanInput; Route::post('account', CreateAccountController::class)->middleware(XssCleanInput::class);
如果您的应用程序中有许多不同的控制器处理大量表单,您可以选择将其注册为全局中间件。
// inside app\Http\Kernel.php protected $middleware = [ // ... \ProtoneMedia\LaravelXssProtection\Middleware\XssCleanInput::class, ];
如果您全局注册了中间件,您可以使用静态的 skipWhen
方法排除请求。您可以为请求添加一个回调进行交互。
XssCleanInput::skipWhen(function (Request $request) { return $request->is('admin.*'); });
您还可以使用静态的 skipKeyWhen
方法排除键。这同样允许您与值和请求进行交互。
XssCleanInput::skipKeyWhen(function (string $key, $value, Request $request) { return in_array($key, [ 'current_password', 'password', 'password_confirmation', ]); });
配置
文件上传
默认情况下,中间件允许文件上传。但是,您可以通过将配置键 middleware.allow_file_uploads
更改为 false
来禁止文件上传。
Blade echo 语句
默认情况下,中间件清理 Blade echo 语句,如 {{ $name }}
、{{{ $name }}}
和 {!! $name !!}
。您可以通过将配置键 middleware.allow_blade_echoes
更改为 true
来允许 echo 语句。
完全替换恶意输入
默认情况下,中间件将恶意输入转换为 null
。您可以通过将配置键 middleware.completely_replace_malicious_input
设置为 false
来配置中间件仅转换恶意部分。这样,输入字符串如 hey <script>alert('laravel')</script>
将被转换为 hey
而不是 null
。
终止请求
而不是转换恶意输入,您可以通过将配置键 middleware.terminate_request_on_malicious_input
设置为 true
来配置中间件,以便在发现任何恶意内容时终止请求。这将抛出一个带有状态码 403 的 HttpException
。
派发事件
您可以将中间件配置为在发现恶意输入时触发事件。将middleware.dispatch_event_on_malicious_input
设置为true
将触发一个ProtoneMedia\LaravelXssProtection\Events\MaliciousInputFound
事件,该事件包含清理后的键、原始请求和清理后的请求。
use Illuminate\Support\Facades\Event; use ProtoneMedia\LaravelXssProtection\Events\MaliciousInputFound; Event::listen(function (MaliciousInputFound $event) { $event->sanitizedKeys; $event->originalRequest; $event->sanitizedRequest; });
voku/anti-xss
的额外配置
从版本1.6.0开始,您可以提供对voku/anti-xss
包的额外配置。您可以通过填写middleware.anti_xss
键来实现这一点。这与之前依赖的Laravel Security包类似。
'anti_xss' => [ 'evil' => [ 'attributes' => ['href'], 'tags' => ['video'], ], 'replacement' => '*redacted*', ]
变更日志
有关最近更改的更多信息,请参阅变更日志。
测试
$ composer test
贡献
有关详细信息,请参阅贡献指南。
其他Laravel包
Inertia Table
:Inertia.js的终极表格,具有内置的查询构建器。Laravel Blade On Demand
:Laravel包,用于在内存中编译Blade模板。Laravel Cross Eloquent Search
:Laravel包,用于在多个Eloquent模型中搜索。Laravel Eloquent Scope as Select
:停止在PHP中重复Eloquent查询作用域和约束。此包允许您通过将它们作为子查询添加来重用查询作用域和约束。Laravel FFMpeg
:此包为Laravel提供与FFmpeg的集成。文件的存储由Laravel的文件系统处理。Laravel MinIO Testing Tools
:在MinIO S3服务器上运行您的测试。Laravel Mixins
:Laravel好东东的集合。Laravel Paddle
:Paddle.com API的Laravel集成,支持webhooks/events。Laravel Task Runner
:编写Shell脚本,就像Blade组件一样,并在本地或远程服务器上运行。Laravel Verify New Email
:此包添加了对验证新电子邮件地址的支持:当用户更新其电子邮件地址时,它不会替换旧地址,直到新地址被验证。
安全
如果您发现任何与安全相关的问题,请通过电子邮件code@protone.media联系,而不是使用问题跟踪器。请不要发送任何问题,如果您有问题,请提出一个问题。
鸣谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。
免费软件
本包是Treeware。如果您在生产中使用它,我们希望您能为世界买一棵树,以感谢我们的工作。通过为Treeware森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。