bucket-sort logo bucket-sort

プログラミングとインフラエンジニアリングの覚え書き

  • Posts
  • About
  • Contact
  1. Home
  2. All Posts
  3. Laravelのレート制限(throttle:5,1)とは何か

Laravelのレート制限(throttle:5,1)とは何か

Mar 27, 2026 Laravel bucket-sort

Laravelのルーティングを見ていると、次のような記述に出会うことがあります。

Route::middleware(['guest', 'throttle:5,1'])->group(function () {
    Route::get('/otp', [OtpController::class, 'show'])->name('otp.show');
    Route::post('/otp', [OtpController::class, 'verify'])->name('otp.verify');
});

この throttle:5,1 は一見すると意味が分かりにくいですが、Laravelにおけるレート制限の設定です。つまり、一定時間内に許可するリクエスト回数を制御する仕組みです。

throttle:5,1 の意味

throttle の書式は次の通りです。

throttle:回数,時間(分)

したがって、

throttle:5,1

は次の意味になります。

項目 内容
5 最大リクエスト回数
1 時間(分)

この設定は、「1分間に最大5回までリクエストを許可する」という制限を表しています。

実際に何が制限されるのか

この設定が付いたルートでは、次のような挙動になります。

対象となるエンドポイント:

GET  /otp
POST /otp

制限内容:

  • 同一クライアント(通常はIPアドレス単位)
  • 1分間に最大5回まで
  • それを超えるとエラーが返る

制限を超えた場合は、HTTPステータスコード 429(Too Many Requests)が返されます。

なぜレート制限が必要なのか

この設定は特に認証系の処理で重要になります。OTP(ワンタイムパスワード)を例に考えると分かりやすいです。

攻撃者が次のように総当たりを試みるケースがあります。

123456
123457
123458
...

このようなブルートフォース攻撃に対して、レート制限をかけることで試行回数を制限できます。

この設定では、

1分間に5回しか試せない

ため、攻撃の進行速度を大きく遅らせることができます。

ここで重要なのは、レート制限は攻撃を完全に防ぐものではなく、「現実的な時間内では成功しない状態にする」ための仕組みであるという点です。

内部の仕組み

Laravelでは、このレート制限は次のミドルウェアによって実現されています。

Illuminate\Routing\Middleware\ThrottleRequests

このミドルウェアは、リクエストの回数をカウントし、制限を超えた場合にブロックします。

カウントの単位

デフォルトでは、次のような情報を組み合わせてカウントします。

  • IPアドレス
  • アクセスしているルート

カウントの保存場所

リクエスト回数はキャッシュに保存されます。

  • Redis
  • Memcached
  • file

つまり内部的には、「どのクライアントが、どのルートに何回アクセスしたか」を一定時間内で記録していることになります。

よくある設定例

用途によってレート制限の値は調整されます。

throttle:5,1   // 1分5回(厳しめ)
throttle:10,1  // 1分10回
throttle:60,1  // 1分60回(APIなど)

ログインやOTPのような認証系では、5回程度に制限するケースがよく見られます。

一方、APIなどではもう少し緩い制限が設定されることが一般的です。

guestミドルウェアとの組み合わせ

今回のコードでは、guest ミドルウェアと組み合わせて使われています。

['guest', 'throttle:5,1']

guest は「ログインしていないユーザーのみアクセス可能」という制約です。

したがって、このルート全体の意味は次のようになります。

  • 未ログインユーザーのみアクセス可能
  • OTPの試行は1分間に5回まで

実務的な視点での理解

レート制限は単なる回数制御ではなく、アプリケーションの安全性を担保するための重要な仕組みです。

主な目的は次の通りです。

  • ブルートフォース攻撃の抑制
  • サーバー負荷の制御
  • APIの濫用防止

これらはすべて、「過剰なリクエストを制限することで、システムを守る」という共通の考え方に基づいています。

注意点

IPベースの制限の限界

デフォルトではIP単位で制限されますが、以下のようなケースでは注意が必要です。

  • 社内ネットワークなどで複数ユーザーが同一IPを使っている
  • 攻撃者がIPアドレスを変えてくる

このような場合、意図しない制限や回避が起きる可能性があります。

ユーザー単位での制限

ログイン後の処理では、IPではなくユーザーID単位で制限をかける設計も検討されます。

まとめ

throttle:5,1 は、Laravelのレート制限ミドルウェアの設定であり、「1分間に5回までリクエストを許可する」という意味を持ちます。

押さえておきたいポイント

  • throttleはリクエスト回数制限
  • 書式は「回数,時間(分)」
  • 超過すると429エラー
  • セキュリティと負荷制御のために使う

この仕組みを理解しておくと、認証処理やAPI設計において、「どこに制限をかけるべきか」を考える際の基準が明確になります。

Laravel PHP セキュリティ
← [C#] ImmutableHashSet<T>の使い方 [C#] Interlockedの使い方 →

Related Posts

  • Laravel FormRequestのauthorize()をちゃんと書くべき理由 Mar 12, 2026
  • Laravelで安全なファイルアップロードを書くためのベストプラクティス Mar 11, 2026
  • Laravel の Event / Listener で Pub/Sub を実装する Apr 2, 2026
  • PHP/Laravel で値の状態を判定するヘルパ関数まとめ Mar 30, 2026

Table of Contents

  • throttle:5,1 の意味
  • 実際に何が制限されるのか
  • なぜレート制限が必要なのか
  • 内部の仕組み
    • カウントの単位
    • カウントの保存場所
  • よくある設定例
  • guestミドルウェアとの組み合わせ
  • 実務的な視点での理解
  • 注意点
    • IPベースの制限の限界
    • ユーザー単位での制限
  • まとめ
    • 押さえておきたいポイント

Recent Posts

  • Laravel の Event / Listener で Pub/Sub を実装する Apr 2, 2026
  • [C#] delegate と event の仕組みを整理する Apr 1, 2026
  • Pub/Sub パターンとは何か Mar 31, 2026
  • PHP/Laravel で値の状態を判定するヘルパ関数まとめ Mar 30, 2026
  • Filament の dehydrated メソッドとは何か Mar 29, 2026

Categories

  • AWS27
  • C#22
  • .NET20
  • Laravel16
  • Linux12
  • Apache8
  • MySQL8
  • PHP8
  • DynamoDB6
  • Nginx5
  • WordPress4
  • インフラ4
  • Hugo3
  • セキュリティ3
  • .NET Framework1
  • Aurora1
  • Filament1
  • Git1
  • SQS1

Tags

  • AWS
  • C#
  • .NET
  • Laravel
  • PHP
  • MySQL
  • セキュリティ
  • Linux
  • Apache
  • Code Snippet
  • DynamoDB
  • NoSQL
  • PHP-FPM
  • RDS
  • DoS
  • Nginx
  • Windows
  • WordPress
  • パフォーマンス
  • 監視
  • Amazon Linux 2023
  • CMS
  • Docker
  • Ipset
  • Iptables
  • OPCache
  • Webサーバー
  • 認可
  • Aurora
  • Blade
Powered by Hugo & Explore Theme.