skydiver / laravel-route-blocker
按IP阻止路由
1.5.0
2020-06-09 11:42 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- orchestra/testbench: ^5.3
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.5
README
按IP阻止路由
(灵感来源于 Laravel Firewall)
要求
Laravel 5.x, 6.x, 7.x 和 8.x
安装
-
通过 composer 安装,请在终端运行以下命令
$ composer require skydiver/laravel-route-blocker
-
发布配置文件
运行以下命令以发布包配置文件
$ php artisan vendor:publish --tag=LaravelRouteBlocker
仍在使用 Laravel 5.4 或更低版本?
请将服务提供者添加到您的 config/app.php
providers 数组中
'providers' => [ ... Skydiver\LaravelRouteBlocker\LaravelRouteBlockerServiceProvider::class, ]
使用方法
- 在
app/Http/Kernel.php
中的$routeMiddleware
数组中注册中间件'blacklist' => \Skydiver\LaravelRouteBlocker\Middleware\BlacklistMiddleware::class, 'whitelist' => \Skydiver\LaravelRouteBlocker\Middleware\WhitelistMiddleware::class,
- 黑名单允许所有流量,除非匹配规则。
- 白名单阻止所有流量,除非匹配规则。
- 您可以注册两者或只注册一个中间件。
-
在
config/laravel-route-blocker.php
上创建一个配置组并插入您的允许/阻止 IP'whitelist' => [ 'my_group' => [ '127.0.0.1', '192.168.17.0', '10.0.1.*' ], 'another_group' => [ '8.8.8.*' ], ], 'blacklist' => [ 'blocked_ips' => [ '127.0.0.1', '192.168.100.0', ], 'blocked_ips2' => [ '8.8.8.8', ], ],
- 您可以根据需要创建任意数量的黑名单/白名单组,并使用不同的 IP 保护不同的路由集合
此外,您还可以配置抛出 HTTP 状态代码或重定向到自定义 URL
'redirect_to' => '', // URL TO REDIRECT IF BLOCKED (LEAVE BLANK TO THROW STATUS) 'response_status' => 403, // STATUS CODE (403, 404 ...) 'response_message' => '' // MESSAGE (COMBINED WITH STATUS CODE)
-
将受保护的路由放在一个组内并指定白名单参数
// Only IPs matched on "my_group" will be allowed to access route Route::group(['middleware' => 'whitelist:my_group'], function() { Route::get('/demo', function () { return "DEMO"; }); }); // Only IPs matched on "my_group" will be blocked to access route Route::group(['middleware' => 'blacklist:blocked_ips'], function() { Route::get('/private', function () { return "Private Page"; }); });
Artisan 命令
-
要获取当前 IP 组的列表,请运行
$ php artisan route:blocks:groups
+-----------------+--------------+-----------+ | Group | IP | Type | +-----------------+--------------+-----------+ | allowed_group_1 | 127.0.0.1 | whitelist | | allowed_group_1 | 127.0.0.2 | whitelist | | allowed_group_1 | 192.168.17.0 | whitelist | | allowed_group_1 | 10.0.0.* | whitelist | | allowed_group_2 | 8.8.8.8 | whitelist | | allowed_group_2 | 8.8.8.* | whitelist | | allowed_group_2 | 8.8.4.4 | whitelist | | blocked_ips_1 | 127.0.0.1 | blacklist | | blocked_ips_1 | 127.0.0.2 | blacklist | | blocked_ips_1 | 192.168.17.0 | blacklist | | blocked_ips_1 | 10.0.0.* | blacklist | | blocked_ips_2 | 8.8.8.8 | blacklist | | blocked_ips_2 | 8.8.8.* | blacklist | | blocked_ips_2 | 8.8.4.4 | blacklist | +-----------------+--------------+-----------+
测试
要手动运行测试套件
vendor/bin/phpunit --verbose
位于 tests/Feature
的测试文件应由 GitHub Action 运行。