情報セキュリティ

基本情報技術者試験セキュアコーディング」の問題

情報セキュリティ情報セキュリティ難易度:hard
K社のWebアプリでは、利用者が自分の注文明細をURLのパラメタに含む注文番号で参照する。ある利用者が注文番号の数字を別の値に書き換えたところ、他人の注文明細が表示されてしまった。この問題への根本対策として、最も適切なものはどれか。
注文番号を連番ではなく推測しにくいランダムな文字列に変更する。
要求された明細の持ち主と要求してきた利用者が一致するかをサーバ側で都度照合する。
注文番号のパラメタをURLではなく、画面に表示されないHTTPヘッダに入れて渡す。
注文明細の照会機能の利用に先立ち、利用者にログインを求める。
正解
要求された明細の持ち主と要求してきた利用者が一致するかをサーバ側で都度照合する。

問題の本質は、認証済みであっても『その注文明細を見る権限がその利用者にあるか』というサーバ側の認可チェックが欠落している点にある。要求された明細が要求者本人のものかをサーバ側で必ず検証すれば、番号を書き換えても他人の明細は表示されず、根本的に防げる。

?選択肢ごとの解説

ア ×推測しにくい番号にしても、何らかの手段で他人の番号を知れば参照できてしまい、認可を確認しない限り根本対策にならない(推測困難性に頼る隠蔽に過ぎない)。
イ ○問題の本質は、認証済みであっても『その注文明細を見る権限がその利用者にあるか』というサーバ側の認可チェックが欠落している点にある。要求された明細が要求者本人のものかをサーバ側で必ず検証すれば、番号を書き換えても他人の明細は表示されず、根本的に防げる。
ウ ×パラメタをヘッダで渡しても利用者は値を変更できるため、渡し方を変えるだけでは他人の明細を参照できる問題は解消しない。
エ ×ログイン必須化は認証の話であり、認証済みの利用者が他人の明細を見られるという認可の欠落は解決しない。

くわしく

この脆弱性は『誰であるか(認証)』は通っていても『その操作をしてよいか(認可)』の確認が漏れている典型である。識別子を直接受け取って処理する設計では、要求ごとに所有者・権限を照合する認可チェックをサーバ側で必ず行うことが原則である。

本番での押さえどころ

試験のコツ

番号書き換えで他人のデータが見える=認可の欠落。対策は『要求者本人の資源かをサーバ側で検証』。認証強化や番号秘匿は根本策でない。

覚え方

認証は『誰か』、認可は『してよいか』。他人の番号で見えるのは『してよいか』の確認漏れ。

よくある誤り

番号をランダム化すれば安全と考える。推測困難性は緩和策に過ぎず、認可チェックの欠落という根本原因を残す点を見落とす。

情報セキュリティの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-sec-0119

【基本情報技術者試験】セキュアコーディングの問題 — 解答・解説|ukamiru 過去問