基本情報技術者試験「セキュアコーディング」の問題
K社のWebアプリでは、利用者が自分の注文明細をURLのパラメタに含む注文番号で参照する。ある利用者が注文番号の数字を別の値に書き換えたところ、他人の注文明細が表示されてしまった。この問題への根本対策として、最も適切なものはどれか。
ア注文番号を連番ではなく推測しにくいランダムな文字列に変更する。
イ要求された明細の持ち主と要求してきた利用者が一致するかをサーバ側で都度照合する。
ウ注文番号のパラメタをURLではなく、画面に表示されないHTTPヘッダに入れて渡す。
エ注文明細の照会機能の利用に先立ち、利用者にログインを求める。
正解
イ.要求された明細の持ち主と要求してきた利用者が一致するかをサーバ側で都度照合する。
問題の本質は、認証済みであっても『その注文明細を見る権限がその利用者にあるか』というサーバ側の認可チェックが欠落している点にある。要求された明細が要求者本人のものかをサーバ側で必ず検証すれば、番号を書き換えても他人の明細は表示されず、根本的に防げる。
?選択肢ごとの解説
ア ×推測しにくい番号にしても、何らかの手段で他人の番号を知れば参照できてしまい、認可を確認しない限り根本対策にならない(推測困難性に頼る隠蔽に過ぎない)。
イ ○問題の本質は、認証済みであっても『その注文明細を見る権限がその利用者にあるか』というサーバ側の認可チェックが欠落している点にある。要求された明細が要求者本人のものかをサーバ側で必ず検証すれば、番号を書き換えても他人の明細は表示されず、根本的に防げる。
ウ ×パラメタをヘッダで渡しても利用者は値を変更できるため、渡し方を変えるだけでは他人の明細を参照できる問題は解消しない。
エ ×ログイン必須化は認証の話であり、認証済みの利用者が他人の明細を見られるという認可の欠落は解決しない。
✎くわしく
この脆弱性は『誰であるか(認証)』は通っていても『その操作をしてよいか(認可)』の確認が漏れている典型である。識別子を直接受け取って処理する設計では、要求ごとに所有者・権限を照合する認可チェックをサーバ側で必ず行うことが原則である。
✓本番での押さえどころ
試験のコツ
番号書き換えで他人のデータが見える=認可の欠落。対策は『要求者本人の資源かをサーバ側で検証』。認証強化や番号秘匿は根本策でない。
覚え方
認証は『誰か』、認可は『してよいか』。他人の番号で見えるのは『してよいか』の確認漏れ。
よくある誤り
番号をランダム化すれば安全と考える。推測困難性は緩和策に過ぎず、認可チェックの欠落という根本原因を残す点を見落とす。
情報セキュリティの他の問題
A社の経理担当者が、取引先を装ったメールに添付された請求書ファイルを業務PCで開いたところ、見慣れない画面が一瞬表示されて消…B社のWebサービスで、複数の利用者アカウントに対し正しいIDとパスワードの組合せによるログインが短時間に外部から成立する事…C社では、退職予定者や異動者のアカウント権限の見直しが滞り、業務上不要になった共有フォルダへのアクセス権が残り続けている。情…D社のファイルサーバがランサムウェアに感染し、業務ファイルが暗号化された。D社は日次でバックアップを取得しているが、バックア…E社の従業員に、取引先銀行を名乗る『口座情報の更新が必要』というメールが届いた。本文中のリンク先URLにアクセスすると、銀行…F社は社外の従業員が、カフェなどの公衆無線LANを利用して社内システムへアクセスしている。通信内容が経路上で第三者に盗聴・改…
この問題を、AIの8-ways解説つきで。
無料ではじめる →基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。
ukamiru 過去問 · 基本情報技術者試験 · fe-b-sec-0119