wafris/laravel-wafris

适用于Laravel的Wafris

v0.0.4 2024-05-23 17:14 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Wafris是一个开源的Web应用程序防火墙(WAF),在Laravel(和其他框架)中运行,由Redis提供支持。

搭配 Wafris Hub,您可以创建规则来阻止恶意流量攻击您的应用程序。

Rules and Graph

例如规则有:

  • 阻止IP地址(IPv6和IPv4)发起请求
  • 在主机、路径、用户代理、参数和方法上设置阻止
  • 限制(节流)请求
  • 可视化传入流量和请求

需要更好的解释?请阅读概述: wafris.org

安装

1. 在Wafris Hub上连接

前往 https://wafris.org/hub 创建新账户,并按照说明连接您的Redis实例。

注意:在步骤3中,您将在应用程序配置中使用此相同的Redis URL。

2. 通过Composer安装此库

composer require wafris/laravel-wafris

3. 发布并配置Wafris

您可以使用以下命令发布配置文件:

php artisan vendor:publish --tag="wafris-config"

我们建议为Wafris创建一个单独的Redis配置。这可以在 config/database.php 中通过添加如下条目来实现

'redis' => [

    'client' => env('REDIS_CLIENT', 'predis'), // Make sure to set your Redis client to predis

    'options' => [
        ...
    ],

    'default' => [
        ...
    ],

    'cache' => [
        ...
    ],

    'wafris' => [
        'url' => env('REDIS_URL'),
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'username' => env('REDIS_USERNAME'),
        'password' => env('REDIS_PASSWORD'),
        'port' => env('REDIS_PORT', '6379'),
        'database' => env('REDIS_CACHE_DB', '3'),
        'read_write_timeout' => 1, // Timeout in seconds
    ],

],

用法

Wafris\AllowRequestMiddleware 中间件添加到您希望由Wafris保护的路由中。

保护所有路由

为了保护Laravel应用程序中的所有路由,请全局添加 Wafris\AllowRequestMiddleware

Laravel 11

从Laravel 11开始,中间件在 bootstrap/app.php 中注册。在该文件的 withMiddleware 部分添加以下行

Application::configure(basePath: dirname(__DIR__))
    // ...
    ->withMiddleware(function (Middleware $middleware) {
        // ... other middleware
        $middleware->append(\Wafris\AllowRequestMiddleware::class);
    });

Laravel 10

为了保护Laravel应用程序中的所有路由,请将 Wafris\AllowRequestMiddleware 添加到 app/Http/Kernel.php 类的 $middleware 属性中。

// app/Http/Kernel.php

/**
 * The application's global HTTP middleware stack.
 *
 * These middleware are run during every request to your application.
 *
 * @var array<int, class-string|string>
 */
protected $middleware = [
    // \App\Http\Middleware\TrustHosts::class,
    \App\Http\Middleware\TrustProxies::class,
    \Illuminate\Http\Middleware\HandleCors::class,
    \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \Wafris\AllowRequestMiddleware::class,
];

保护特定的中间件组

为了保护特定的中间件组,如 webapi 组,请将 Wafris\AllowRequestMiddleware 添加到 app/Http/Kernel.php 类中的每个所需的中间件组。

// app/Http/Kernel.php

/**
 * The application's route middleware groups.
 *
 * @var array<string, array<int, class-string|string>>
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Wafris\AllowRequestMiddleware::class,
    ],

    'api' => [
        // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
        \Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Wafris\AllowRequestMiddleware::class,
    ],
];

保护单个路由

在定义路由时使用 Wafris\AllowRequestMiddleware 中间件。

// routes/web.php

Route::get('/signup', function () {
    // ...
})->middleware(\Wafris\AllowRequestMiddleware::class);

测试

composer test

更新日志

请参阅 CHANGELOG 了解最近更改的更多信息。

贡献者

帮助/支持

许可证

Elastic License 2.0 - 请参阅 许可证文件 了解更多信息。