情報処理安全確保支援士試験 過去問 令和4年 春 午後1問1

スポンサーリンク

セキュリティスペシャリスト

問題はIPAからご確認ください。
https://www.ipa.go.jp/shiken/mondai-kaiotu/2021r03.html#aki_sc
答えはIPAの回答例となります。

設問1

(1)

HTTPヘッダインジェクションとは、クライアントから送信される値を適切に処理することなく、HTTPレスポンスヘッダに含めてしまう脆弱性攻撃。
改行コードは「%0%0A」になります

答え:ア

(2)

下線②は設問1(1)を参照

SQLインジェクションはデータベースと連動したWebアプリケーションなどに対する攻撃手法の一つで、検索文字列など外部から指定するパラメータの一部にSQL文の断片などを混入させ不正な操作を行うもの

SQL文は、動的に変化する値に「?」を使用します。この「?」のことをパラメータ変数やプレースホルダーと呼びます。

答え:プレースホルダ-

(3)

a は設問1(1)を参照

メールヘッダーインジェクションとは、メールの件名などの入力値を改ざんすることで、Bcc:などのメールヘッダーを付加する攻撃のことをいいます。
対策としてはメールヘッダーを固定値にする・送信用APIを使用する・改行コードを削除となっているので

答え a:改行コード

設問2

(1)

GETリクエストのクエリ文字列に取得したidを指定するとなっているので、
「https://(省略)/select?id=xxx」のようにURLにプロジェクトIDが表示されるはずですので、
「id=xxx」の部分を書き換えるれば良いです。
プロジェクトIDは連番なので、推測もしやすいですので

答え:クエリ文字列のidに、未参加のプロジェクトのプロジェクトIDを指定する

(2)

脆弱な部分は「情報選択機能においてクエリ文字列で受け取ったプロジェクトIDをチェックせずに利用していることに起因していた。」とあり、
方法2でクエリ文字列で取得ではなく、ログイン後に生成されるセッションIDから取得した利用者情報から紐づくプロジェクトIDを取得するようになるので

答え:プロジェクトを示すパラメータを外部から指定できないから
  :セッション情報からプロジェクトIDを取得するから

(3)

7:で「~プロジェクトID=?”;」としてプレースホルダを使っています。
Javaでプレースホルダを利用する場合、プリペアドステートメントを使います。

答え b:ウ

(4)

Cは設問2(3)を参照

8でプロジェクトIDをセットするSQLをstmtに格納しましたので
9でプロジェクトIDをセットするために、8で宣言した「stmt」にプロジェクトIDを代入しますので

答え c:stmt

設問3

前回のコードではSQLの条件がプロジェクトIDだけだと、プロジェクトIDが偽装されていた場合は
利用者と関係ないプロジェクトが確認可能でしたが、
修正して3で新たに情報番号を取得しています。
しかし、指定が情報番号だけだと、プロジェクトIDと同様に偽装された場合に同じ状態になりますので
7で取得しているプロジェクトIDを使用して情報番号とプロジェクトIDが一致する条件にすれば、判明している脆弱性は解消できます。
※SELECT (カラム名) FROM (テーブル名) WHERE (条件文);

答え d:情報番号=? AND プロジェクトID=?

コメント

タイトルとURLをコピーしました