webdevartisan/laravel-shield

阻止一定时间内访问特定(利用)URL的恶意机器人和使用者。

v3.3.0 2024-09-24 09:26 UTC

README

您的应用程序被恶意请求攻击,尝试利用URL。此包检测这些请求并阻止其IP地址。被阻止的用户将在阻止到期之前无法访问您的应用程序。

  1. 阻止像 /wp-admin?invokefunction&function=call_user_func_array&vars[0]=phpinfo 这样的利用URL。
  2. 阻止像 SeznamFlexbotMail.ru 这样的用户代理。
  3. 设置IP阻止的过期时间。
  4. 设置IP白名单/黑名单。

安装

步骤1:使用composer安装包

composer require webdevartisan/laravel-shield

步骤2:确保注册中间件。

要在所有请求上使用它,请将其添加为第一个选项到文件app/Http/Kernel.php中$middlewareGroups下的web部分。

protected $middlewareGroups = [
    'web' => [
        \Webdevartisan\LaravelShield\Http\Middleware\BlockMaliciousUsers::class,
    ],
];

要在特定请求上使用它,请将其添加到任何组或文件app/Http/Kernel.php中的protected $middleware属性。

protected $middleware = [
        \Webdevartisan\LaravelShield\Http\Middleware\BlockMaliciousUsers::class,
    ];

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

php artisan vendor:publish --provider="Webdevartisan\LaravelShield\LaravelShieldServiceProvider" --tag="config"

用法

该包使用自动发现。包使用一个中间件类来执行检查和阻止。

配置设置

启用保护

您可以在发布的配置文件中启用或禁用保护,或在.env中设置值(默认启用)。

SHIELD_PROTECTION_ENABLED=true

过期时间

在发布的配置文件中设置阻止过期时间(以秒为单位),或在.env中设置此值(默认3600秒)。

SHIELD_EXPIRATION_TIME=3600

最大尝试次数

在阻止IP之前设置允许的最大恶意请求次数。默认为5。您可以在配置或.env中更改它。

SHIELD_MAX_ATTEMPTS=5

定义恶意URL

在发布的配置文件中定义恶意URL。您只需要使用恶意字符串的一部分。匹配不区分大小写。

示例:设置wp-admin将阻止'/wp-admin'、'/index.php/wp-admin/foo'和'/?p=wp-admin'。

定义恶意用户代理

在发布的配置文件中定义恶意用户代理。

示例:设置seznam将阻止用户代理'Mozilla/5.0 (compatible; SeznamBot/3.2-test4; +http://napoveda.seznam.cz/en/seznambot-intro/)'。

定义存储类实现

默认情况下,阻止的IP存储在缓存中,使用存储实现\Webdevartisan\LaravelShield\Services\BlockedIpStoreRateLimiter::class

您可以创建一个不同的存储类以供使用,并在配置文件中替换它,或在.env中设置此值。

  • \Webdevartisan\LaravelShield\Services\BlockedIpStoreRateLimiter
SHIELD_STORAGE_IMPLEMENTATION_CLASS='\Webdevartisan\LaravelShield\Services\BlockedIpStoreRateLimiter'

测试

composer test
XDEBUG_MODE=coverage vendor/bin/phpunit tests --coverage-html code-coverage 

更新日志

有关最近更改的更多信息,请参阅更新日志

安全

如果您发现任何安全问题,请通过电子邮件webdevartisan@mail.ru联系,而不是使用问题跟踪器。

致谢

许可

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

Laravel包模板

此包是使用Laravel包模板生成的。