こんな被害が起きます
会員ページのURLに含まれる番号を「1」から「2」に変えただけで、他人のマイページや注文履歴が表示されてしまう。管理画面のURLを知っている人なら誰でもログインなしで開けてしまう。こうした事故は珍しくありません。「ログイン機能を実装した=安全」と思われがちですが、ログインの有無と、ログインした人が見てよい範囲の制御は別の問題です。
認証不備とアクセス制御不備の違い
認証の不備は、そもそも「本人確認」の仕組みが弱いケースです。パスワードの使い回しや推測されやすいパスワードを許可している、ログイン試行回数に制限がないなどが該当します。アクセス制御の不備は、本人確認はできていても「この人がどこまで見てよいか」の権限チェックが漏れているケースです。他人のIDを指定するだけで情報が見えてしまう、一般ユーザーが管理者用のURLを直接開けてしまう、といった問題がこれにあたります。
実際にあった被害事例
国内の会員制サービスで、URLパラメータの番号を変えるだけで他の会員の個人情報が閲覧できる状態になっていたことが発覚し、大きく報道された事例があります。中小企業のサイトでも、開発時に「とりあえず動くように」作った管理画面が、後から見直されないまま外部に公開され続けているケースが少なくありません。
自分のサイトは大丈夫?チェックポイント
- 会員ページのURLに、連番や推測しやすいIDが含まれている
- 管理画面のURLが検索エンジンや外部から見つかる可能性がある
- ログインなしで管理画面を直接開こうとすると、エラーではなく画面が表示される
- 権限(一般会員・管理者など)ごとのアクセス範囲を明文化したことがない
対策方法
開発者向け:すべてのリクエストで「このユーザーはこの操作・このデータにアクセスしてよいか」をサーバー側で毎回検証する設計が基本です。URLやIDを直接指定されても、権限のない対象へはアクセスできないようにします。加えて多要素認証を導入すると、認証不備によるなりすましのリスクを下げられます。
非エンジニアの方向け:管理画面のURLは推測されにくいものにし、IPアドレス制限やBASIC認証など、CMSの入力フォーム以外の防御も重ねて設定しておくことをおすすめします。
無料診断ではここまで
セキュリティブースターの自動診断は、管理画面と思われるパスへの直接アクセス可否など、外部から観測できる範囲を確認しますが、「ログイン後にどこまで他人のデータが見えるか」といった、実際にログインして初めて分かる権限設計の不備までは検証できません。