情報処理安全確保支援士試験 令和4年度 春期 午後1 問1
【出典:情報処理安全確保支援士試験 令和4年度 春期 午後1 問1(一部、加工あり)】
[情報表示機能の脆弱性]
情報セキュリティ部は、情報表示機能にも情報選択機能と同様の脆弱性があることを指摘した。Dさんは、情報表示機能にも同様の修正を行った。修正後の情報表示機能のソースコードを図3に示す。
情報セキュリティ部による脆弱性検査に合格後、Sシステムの改修版がリリースされ、各プロジェクト内の情報共有が強化された。
d:情報番号=? AND プロジェクトID=?
「String sql = “SELECT 情報番号, 情報名, 情報内容 FROM 情報管理テーブル WHERE (d)”;」
SQL分のWHERE部が問われています。
情報表示機能にも情報選択機能と同様の脆弱性があり同様の修正を行ったということから、情報選択機能と情報表示機能の違いを確認していきましょう。
表2(ログインから情報表示までのSシステムの画面遷移)で確認します。
- 情報選択機能(項番2):情報番号、情報名を表示
- 情報表示機能(項番3):情報番号、情報名, 情報内容を表示
情報選択機能でのSQL文を図2(修正後の情報選択機能のソースコード)で確認すると、「String sql = “SELECT 情報番号, 情報名 FROM 情報管理テーブル WHERE プロジェクトID=?”;」となっています。
WHERE部でプロジェクトIDを指定し、該当する情報番号、情報名を選択しています。
これに対し、情報表示機能では選択した情報の情報内容が必要であるため、WHRE部としては情報番号が必要であることが分かります。
ここでもう少し深掘りして考えます。
情報番号があれば情報内容は選択できますが、これだと当該情報に紐づくプロジェクトに所属していない利用者でも情報を表示できてしまうリスクがあります。
これに対しては「方法2:情報選択機能の利用時に、セッション情報から利用者情報を取得する。情報選択機能は、当該利用者情報からプロジェクトIDを取得する。」とあるように、セッション情報からプロジェクトIDを取得できるので、WHERE部でプロジェクトIDも併せて指定します。
「String sql = “SELECT 情報番号, 情報名, 情報内容 FROM 情報管理テーブル WHERE 情報番号 = ? AND プロジェクトID = ?”;」とすればいいでしょう。