protonemedia/laravel-xss-protection

Laravel XSS 防护,中间件和清理

1.6.0 2024-03-14 13:09 UTC

This package is auto-updated.

Last update: 2024-09-20 14:12:03 UTC


README

Latest Version on Packagist run-tests Total Downloads

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包

安全

如果您发现任何与安全相关的问题,请通过电子邮件code@protone.media联系,而不是使用问题跟踪器。请不要发送任何问题,如果您有问题,请提出一个问题。

鸣谢

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件

免费软件

本包是Treeware。如果您在生产中使用它,我们希望您能为世界买一棵树,以感谢我们的工作。通过为Treeware森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。