あなたの画面は、しゃべりすぎていないか
ある日、あなたが銀行の窓口に立ち寄ったとします。番号を伝えると窓口スタッフがこう言いました。
「その口座番号は存在します。ただし、暗証番号が違います」
丁寧ですよね。でも、ちょっと待ってください。「口座番号は存在する」というその一言、実は言わなくていい情報じゃないでしょうか?
これと同じことが、Webシステムのエラーメッセージでも起きています。ユーザへの親切心から実装した「わかりやすいエラーメッセージ」が、知らず知らずのうちに攻撃者への案内板になってしまっているケースは、実は非常に多いのです。
1. ログイン画面でのエラーメッセージ
認証失敗のとき
ログインに失敗したとき、こんなメッセージを表示していませんか?
- 「ユーザIDが正しくありません」
- 「パスワードが正しくありません」
ユーザにとっては「あ、IDを打ち間違えたのか」とすぐ気づけて便利です。しかし攻撃者にとっては、まったく別の意味を持ちます。
「パスワードが違います」→「このIDは実在する」
たったこれだけの情報でも、攻撃者にとっては金脈です。「このIDは本物だ」という確信を持って、次はパスワードを総当たりにかければいい。メッセージ一つで、攻撃の的を絞らせてしまうのです。
推奨される設計はシンプルです。IDが悪いのか、パスワードが悪いのか──あえて曖昧にする。この「わざと不親切にする設計」こそが、セキュリティの要です。
✅ 推奨メッセージ:「ユーザIDまたはパスワードが正しくありません」
アカウントロックのとき
連続したログイン失敗でアカウントをロックする仕組みは、立派なセキュリティ対策です。でも、そのロックを画面で知らせるのは要注意です。
- 避けるべき表現:「連続で失敗したため、アカウントをロックしました」
この一文は攻撃者に「このIDは実在した」という確信を与えてしまいます。さらに言えば、「ロックさせることに成功した」という手応えを与え、攻撃継続の動機にさえなりかねません。
では、どうするのが正解か?
- 画面には通常の失敗メッセージと同じ文言を表示する
- ロックの事実は、登録済みメールアドレスにのみ通知する
攻撃者には「何も起きていないように見せる」。本物のユーザにだけ、こっそり救済措置を届ける。これがベストプラクティスです。以下はメールによるロック通知の例です。

✅ ロックはメールのみで本人に通知(画面には表示しない)
2. パスワードリセット画面でのエラーメッセージ
「パスワードを忘れた」ページで自分のメールアドレスを入力したとき、こんなメッセージが出たことはありませんか?
- 「ご入力いただいたメールアドレスは登録されていません」
ユーザには親切。でもこれは、攻撃者に「メールアドレスが実在するかどうか」を確認するツールを渡しているようなものです。特にメールアドレスがユーザIDを兼ねているシステムでは、これがアカウント列挙(実在するIDを機械的に探し出す手法)に直結します。
✅ 推奨:登録があってもなくても画面には同じ文言を出す。実際の案内は登録がある場合にだけメールで届ける。
3. 新規登録・メールアドレス変更画面でのエラーメッセージ
新規登録しようとしたとき、こんなメッセージを見たことがあるでしょう。
- 「このメールアドレスは既に登録されています」
これも一見、「同じアドレスで二重登録しようとしてるよ」と教えてくれる親切なメッセージです。しかし、これがプライバシー上の重大なリスクになります。
【シナリオ】
- 悪意のある第三者が、知人のメールアドレスを入力して登録操作をする
- 画面に「このメールアドレスは既に登録されています」と表示される
- 「あ、この人やっぱりこのアプリ使ってるんだ…」と確信を持たれる
マッチングアプリ・転職サイト・医療系サービスなど、利用していること自体を他人に知られたくないサービスでは、プライバシーの観点で致命的です。
✅ 推奨:
・登録がない場合 → 本登録用URLをメールで送り、心当たりがなければ破棄するよう案内
・登録がある場合 → 「既にアカウントをお持ちです。こちらからログインしてください」とメールで案内
アカウントが特定された後に待ち受けるもの
ここまで「エラーメッセージからアカウントが特定される危険性」を見てきました。では実際に、攻撃者がIDを特定した後、何をしてくるのでしょうか。
- 総当たり攻撃(ブルートフォース攻撃)
IDが判明したなら、あとはパスワードを総当たりするだけ。ツールを使えば膨大なパターンを高速で試せます。IDが固定されている分、パスワードさえ突破できればアカウントを乗っ取ることが可能です。 - フィッシングメール
「このサービスを使っている人」とわかっているから、偽のログインメールへの反応率が格段に上がります。無差別に送るより、はるかに効果的です。 - リスト型攻撃(パスワードリスト攻撃)
過去に流出した他サービスの「IDとパスワードのセット」を使ってログインを試みます。パスワードを使い回しているユーザを狙い撃ちにします。 - アカウントロックアウト嫌がらせ
特定のIDに対して意図的にログイン失敗を繰り返し、本人をサービスから締め出す。金銭目的でなく、純粋な嫌がらせとして行われるケースもあります。
まとめ:「何を表示しないか」を設計する
エラーメッセージの設計で大切な原則は、「攻撃者に何も教えない」こと。「何を表示するか」と同じくらい、「何を表示しないか」を意識した設計が、安全なシステムを作る第一歩です。
| シーン | 避けるべき表現 | 推奨する表現 |
|---|---|---|
| ログイン失敗 | 「ユーザIDが違います」 「パスワードが違います」 |
「ユーザIDまたはパスワードが正しくありません」 |
| アカウントロック | 「アカウントをロックしました」 (画面に表示) |
通常と同じ失敗メッセージ + メールのみで通知 |
| パスワードリセット | 「このメールは登録されていません」 | 「登録されている場合、案内を送信します」 |
| 新規登録 | 「このメールは既に登録されています」 | 「手続きの案内をメールで送信しました」 |
セキュリティの不安、GENZと一緒に解消しませんか?
ユーザーへの「親切心」が、意図せず攻撃者への「ヒント」になってしまうのは非常に怖いですよね。
私たちGENZは、そんなエンジニアや運営者の皆様の悩みに寄り添い、安全なシステム作りをサポートします。小さな疑問やちょっとした確認からでも構いません。専門家の目線で貴社のシステムをしっかりチェックし、確かな安心をお届けします。まずは、お気軽にお問い合わせください!
脆弱性診断・セキュリティ テスト -株式会社GENZ – [GENZ, Inc.]
<過去の関連記事>
脆弱性診断スキャンツール比較まとめ|費用・機能・強み/弱み・開発国まで徹底整理
脆弱性診断とフォレンジック調査の違いとは?“事前”と“事後”をつなぐセキュリティ対応戦略
DDoS攻撃とXSS攻撃の違い |「家」に例えて学ぶサイバー攻撃の本質
「ユーザIDが正しくありません」
「ユーザIDまたはパスワードが正しくありません」
「連続で失敗したため、アカウントをロックしました」
「ご入力いただいたメールアドレスは登録されていません」
「ご入力いただいたアドレスが登録されている場合、案内を送信します」
「このメールアドレスは既に登録されています」
「入力いただいた内容を確認し、手続きの案内をメールで送信しました」