我在Laravel中使用Cache来禁止垃圾IP,寻找更好的解决方案

问题描述 投票:0回答:1

我就是这样做的:

$ip = $request->ip();

if (Cache::has('banned_ip_' . $ip)) {
    return response()->json([
        'message' => 'Access blocked',
        'reason' => 'You have been banned from accessing this service.'
    ], Response::HTTP_FORBIDDEN);
}
if (
    str_contains($code, 'admin') ||
    str_contains($code, 'env') ||
    str_contains($code, 'config') ||
    str_contains($code, 'php') ||
    str_contains($code, 'service') ||
    str_contains($code, 'setting') ||
    str_contains($code, 'server')
) {
    Log::channel('shortLink')->warning('Blocked access for code: ' . $code . ' from IP: ' . $ip);

    Cache::put('banned_ip_' . $ip, true, now()->addDay());

    return response()->json([
        'message' => 'Access blocked',
        'reason' => 'Forbidden code detected, your IP has been banned.'
    ], Response::HTTP_FORBIDDEN);
}

我正在寻找更好的方法来做到这一点,但我不知道该怎么做。

这段代码位于中间件中。

如果有的话,我希望有更好的方法。

php laravel security laravel-middleware
1个回答
0
投票

您可以使用 Laravel Firewall 这个包,而不是从头开始创建一个。它支持更多功能,包括:

用法示例 中间件已经定义,因此您只需将它们添加到您的路由中即可。 firewall.all 中间件应用配置文件的 all_middleware 数组中可用的所有中间件:

Route::group(['middleware' => 'firewall.all'], function () {
Route::get('/', 'HomeController@index');
});

您还可以在每个路由中应用每个中间件。例如,仅允许列入白名单的 IP 访问管理区域:

Route::group(['middleware' => 'firewall.whitelist'], function () {
Route::get('/admin', 'AdminController@index');
});
© www.soinside.com 2019 - 2024. All rights reserved.