設問2 【情報選択機能の脆弱性】について、(1)〜(4)に答えよ。
(1)本文中の下線③について、未参加のプロジェクトに参加しているかのように偽るための操作を、40字以内で具体的に述べよ。
方法1で、「プロジェクトIDの取得方法はGETリクエストのクエリ文字列に、”id=プロジェクトID”の形式で指定する。」と記載されています。
GETリクエストに指定するということは、未参加のプロジェクトIDをクエリ文字列のidに指定することでリスト可能です。
GETリクエストのURL例
https://www.sample.com/select?id=xxx
解答:GETリクエストのクエリ文字列に未参加のプロジェクトIDを指定する
(2)本文中の下線④について、方法1の脆弱性が方法2で解決されるのはなぜか。30字以内で述べよ。
方法1の脆弱性は、(1)で解答した通り、利用者によってプロジェクトIDが改ざん可能であるということでした。
そこで、方法2では「情報選択機能の利用時にセッション情報から利用者情報を取得する。情報選択機能は、当該利用者情報からプロジェクトIDを取得する。」と記載されています。
セッション情報から利用者情報を取得し、紐づいているプロジェクトIDを取得するため、パラメータでプロジェクトIDを受け渡すことがありません。
そのため、プロジェクトIDの改ざんが回避できます。
また、取得元のセッション情報を改ざんすることで、未参加のプロジェクトIDを指定するという考えもあるかもしれませんが、表2の注記に「セッションIDはログイン時に発行される推測困難な値」であることがわかります。
そのため、セッション情報を改ざんし、不正な値を設定するのは現実的ではありません。
解答例:プロジェクトを示すパラメタを外部から指定できないから/セッション情報からプロジェクトIDを指定するから
(3)図2中及び図3中の(b)に入れる適切な字句を、解答群の中から選び、記号で答えよ。
図2の7行目のSQLでは、プロジェクトIDにプレースホルダを使っています。
Javaでプレースホルダを利用する場合、プリペアドステートメントを利用します。
よって、(b)はPreparedStatementです。
(4)図2中の(c)に入れる適切な字句を答えよ。
9行目はプロジェクトIDをセットする処理です。
プロジェクトIDはプレースホルダで実装していました。
よって、プロジェクトIDをセットするためには、8行目で宣言したステートメント「stmt」を代入する必要があります。
答えはstmtです