コンテンツへスキップ
uencoder

ブルートフォース攻撃を防ぐレート制限を実装する

レート制限は時間あたりのリクエスト数に上限を設け、ブルートフォース、クレデンシャルスタッフィング、DoS 攻撃を防ぎます。トークンバケットとスライディングウィンドウのアルゴリズムを学びましょう。

  1. 1

    レート制限は、クライアントが時間枠内に送れるリクエスト数を制限します。一般的なアルゴリズム:(1) 固定ウィンドウ — シンプルですが、ウィンドウ境界でのバーストを許します。(2) スライディングウィンドウ — より滑らかで、ローリングウィンドウでリクエストを追跡します。(3) トークンバケット — 容量までのバーストを許可し、一定のレートで補充されます。

  2. 2
    ハッシュ計算ツール →

    クライアント識別子(IP、ユーザー ID、API キー)をハッシュして、レート制限キーとして使います。生の IP を保存しないために SHA-256 を使ってください。ハッシュは、高速なストア(Redis、インメモリマップ)内のカウンターに対応付けられます。

  3. 3
    HMAC ジェネレーター →

    レート制限の状態(カウント、ウィンドウ開始時刻)を HMAC で署名して、改ざんを防ぎます。クライアント側のレート制限(例: JWT ベース)を使う場合、署名付きトークンによって、クライアントが自分のカウンターをリセットできなくなります。

  4. 4

    ログインのブルートフォース対策として、アカウントごとに 15 分あたり 5 回、IP ごとに 10 回に制限します。指数バックオフを使い、失敗のたびに待ち時間が増えるようにします。5 回失敗したらアカウントをロックし、メール認証を要求してください。API レート制限では、無料枠は毎分 100 リクエスト、有料は 1000 リクエストにします。429 Too Many Requests と Retry-After ヘッダーを返してください。

よくある質問

トークンバケットとスライディングウィンドウはどう使い分けますか?
トークンバケットは制御されたバースト(バケット容量まで)を許可してから、定常レートに従います。ときどきのバーストが許容される API に適しています。スライディングウィンドウは、どのウィンドウでも厳密な上限を強制します。ログインのようなセキュリティ上重要なエンドポイントに適しています。バーストが許容できるかどうかで選んでください。
分散環境でのレート制限はどう扱えばよいですか?
共有ストア(Redis、Memcached)を使い、すべてのサーバーが同じカウンターを参照するようにします。高スループットが必要な場合は、Redis の Lua スクリプトによるスライディングウィンドウ(アトミックなチェック&インクリメント)を使います。エッジでのグローバルなレート制限には、CDN の機能(Cloudflare、AWS WAF)を使ってください。

このタスクを解決するワークフロー

コンテンツのハッシュと Base64 エンコード
入力のハッシュを計算し、コンパクトな転送のためにハッシュダイジェストを Base64 としてエンコードする。
パイプライン
テキストのハッシュと整合性検証
入力テキストのハッシュを計算し、期待されるハッシュと比較して整合性を検証する。
パイプライン
テキストのハッシュと CRC32 チェックサム検証
データ整合性検証のために、暗号学的 SHA-256 ハッシュと CRC32 チェックサムの両方を計算する。
パイプライン
HMAC 署名後に Base64 エンコード
HMAC 署名を生成し、API 認証ヘッダーのために Base64 エンコードする。
パイプライン
HMAC 署名と検証
メッセージの HMAC 署名を生成し、期待される署名と照合して検証する。
パイプライン
API リクエスト文字列の HMAC 署名
API 呼び出しを認証するために、リクエストペイロードの HMAC-SHA256 署名を生成する。
パイプライン
MD5 ハッシュ後に Base58 エンコード
MD5 ハッシュを計算し、コンパクトな表現のために Base58 としてエンコードする。
パイプライン
マルチハッシュ速度比較
入力をハッシュし、複数のハッシュアルゴリズムをベンチマークして速度と出力を比較する。
パイプライン
パスワード生成とハッシュ
ランダムパスワードを生成し、安全な保存のためにハッシュする。
パイプライン
SHA3-256 ハッシュと CRC32 チェックサム
SHA3-256 ハッシュを計算し、二重整合性検証のために CRC32 チェックサムを計算する。
パイプライン
SHA-512 ハッシュ後に Hex エンコード
SHA-512 ハッシュを計算し、可読性のために Hex としてエンコードする。
パイプライン
テキスト反転とハッシュ
テキストを反転し、その後反転結果の SHA-256 ハッシュを計算する。
パイプライン
テキストスクランブルとハッシュ
テキストをスクランブルし、その後スクランブル結果をハッシュする。
パイプライン

関連ツール