API の回数制限や、不正なアクセスへの手当てはどうしますか

入口の WAF とボット対策、利用者ごとの回数制限、ログイン失敗の制限と異常の通知を、層に分けて重ねると答える問い。数え方の仕組みと、強くしすぎたときの弱点まで話します。

答えてみる

面接官に「API の回数制限や、不正なアクセスへの手当てはどうしますか」と聞かれたつもりで、答えを見る前に自分の言葉で答えます。

声に出して答えた人は「書かずに答えを見る」で開けます。

解説を読む

聞かれ方から関連するコースまで、この問いの解説を全部ここに置いています。

こう聞かれます

  • 「API の回数制限や、不正なアクセスへの手当てはどうしますか」
  • 「ログインの画面に、パスワードを総当たりで試されたらどうしますか」
  • 「回数制限は、どこで、何を単位に数えますか」

面接官が見ている点

  • 1 つの手で全部守ろうとせず、入口、アプリ、ログインと層を分けて考えられるか
  • 「誰の回数を」「どこで数えるか」を、台数が増えた環境も含めて考えられるか
  • 止めすぎて普通の利用者を困らせる、という弱点も分かっているか

短い答え

  • 入口では WAF (怪しい要求を弾く門番) とボット対策で、よくある攻撃と機械的な大量アクセスを先に落とします。
  • アプリでは利用者や API キーごとに回数を数え、決めた数を超えたら 429 (多すぎる) を返します。
  • ログインは失敗の回数を絞り、いつもと違う動きを見つけたら通知が飛ぶようにしておきます。

少し詳しい答え

層に分けて重ねる

  1. 入口 WAF やボット対策で、よく知られた攻撃の形や、明らかな機械のアクセスを落とします。AWS WAF、Google Cloud の Cloud Armor、Cloudflare の WAF とレート制限のルールなどが使えます。ボットかどうかの確かめには reCAPTCHA や Cloudflare の Turnstile のような物があります
  2. アプリログインした利用者、API キー、IP アドレスなどを単位に回数を数えます。IP だけだと、同じ回線を使う大勢をまとめて止めてしまうので、ログイン後は利用者の単位で数えるのが基本です
  3. ログイン同じアカウントへの失敗が続いたら、待ち時間を伸ばす、追加の確認を求める、などで総当たりを遅くします
  4. 見張り失敗の急増や、ふだんと違う国や時間からのアクセスを数え、通知を出します

数え方と置き場所

数え方には、一定の速さで札が補充され、1 回の要求で 1 枚使う「トークンバケット」や、直近の決まった時間の回数を数える「スライド窓」があります。

サーバーが何台もあると、それぞれが自分の手元で数えても全体の回数になりません。Redis のような共有の置き場や、1 か所で順に処理する仕組みに数を集めます。置き場によっては反映が遅れるので、厳密さと速さのどちらを取るかを決めます。

超えたときは、決まった形で返すと、呼ぶ側が待って再試行できます。

http

HTTP/1.1 429 Too Many Requests
Retry-After: 30

トレードオフ

制限を強くするほど攻撃は通りにくくなりますが、普通の利用者も止まりやすくなります。とくにアカウントを固く閉じる形は、攻撃者がわざと失敗を重ねて本人を締め出す手にも使えます。最初は緩めに置いてログで実際の回数を見てから絞る、締め出すより遅くする方を選ぶ、のように調整します。数を共有の置き場に集める仕組みは、その置き場が遅くなったり落ちたりしたときの扱い (通すか止めるか) も決めておきます。

よくある間違い

  • IP アドレスだけで数える 会社や学校のように同じ回線を使う大勢をまとめて止めてしまいます。ログイン後は利用者の単位で数えます
  • 各サーバーの手元で数える台数が増えると、決めた数の何倍も通ります。共有の置き場に数を集めます
  • 止めたら終わりにする失敗の急増に気づく通知がないと、攻撃が続いていることを見逃します

深掘りの問い

  • 「ログインの総当たりと、たくさんのアカウントに同じパスワードを試す攻撃は、どう違いますか」 後者はアカウントごとの失敗回数では見つけにくいので、IP や全体の失敗の割合でも見る、と答えます
  • 「回数の置き場が落ちたらどうしますか」通すか止めるかを API の重さで決める、たとえばログインは止める側に倒す、のように答えます
  • 「料金のかかる API を守るには」回数だけでなく、1 回あたりの重さや費用で上限を置く、と答えます

確認日 2026年10月24日

技術面接問題の一覧へ戻る