shinke1987.net
雑多な備忘録等のはず。
他のカテゴリ・タブ
目次
PR

Laravelでのリクエストに対するレート制限

2024-04-04 2024-04-08

目的

特定の画面やAPIへのHTTPリクエストにレート制限を設けたい。

より具体的に言うと、ログインAPIにリクエストできるのは、IPアドレス1個につき1分間に3回までとし、
それを超えたらHTTPレスポンスコード429を返すようにしたい。

編集するファイル

RouteServiceProvider.php

public function boot(): void
{
    RateLimiter::for('login', function(Request $request) {
        return Limit::perMinute(3)->by($request->ip());
    });
}

web.php

// 認証済みでない場合。
Route::group([
    'middleware' => 'guest',
    'controller' => LoginController::class
], function () {
    // ログイン画面。
    Route::get('/login', 'showLogin')->name('login');

    // ログインAPI。
    Route::post('/auth', 'auth')->name('auth')
        ->middleware('throttle:login');
});

確認

これでログインAPIへ1分間に4回アクセスすると、429のHTTPレスポンスコードが返ってくる。

1分間経過後、再度ログインAPIへアクセスできるようになる。

後はパスワードの長さを適切なものにしたりすれば、
ブルートフォースアタック対策としてはこれで十分だと思っています。

HTTPレスポンスヘッダの下記項目を確認しても良い

同一カテゴリの記事