wafris / laravel-wafris
适用于Laravel的Wafris
Requires
- php: >=8.1
- illuminate/contracts: ^10.0|^11.0
- predis/predis: ^2.2
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.0
- orchestra/testbench: ^8.8|^9.0
- spatie/laravel-ray: ^1.26
This package is auto-updated.
Last update: 2024-09-08 08:12:07 UTC
README
Wafris是一个开源的Web应用程序防火墙(WAF),在Laravel(和其他框架)中运行,由Redis提供支持。
搭配 Wafris Hub,您可以创建规则来阻止恶意流量攻击您的应用程序。
例如规则有:
- 阻止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, ];
保护特定的中间件组
为了保护特定的中间件组,如 web
或 api
组,请将 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 了解最近更改的更多信息。
贡献者
帮助/支持
- Email: support@wafris.org
- Twitter: @wafrisorg
- 预约: https://app.harmonizely.com/expedited/wafris
许可证
Elastic License 2.0 - 请参阅 许可证文件 了解更多信息。