正解 ア 次の問題へ

問15 安全なWebアプリケーションの作り方について、攻撃と対策の適切な組合せはどれか。

攻撃 対策
SQLインジェクション SQL文の組み立てに静的プレースホルダを使用する。
クロスサイトスクリプティング 任意の外部サイトのスタイルシートを取り込めるようにする。
クロスサイトリクエストフォージェリ リクエストにGETメソッドを使用する。
セッションハイジャック 利用者ごとに固定のセッションIDを使用する。

解説

ア 正解
 SQLインジェクションとは、画面やリクエストにSQL文の文法をねじ曲げる文字を挿入することで、誤動作を引き起こし情報漏えいや、データの破壊を引き起こす攻撃です。対策としては、リクエスト文字列のサニタイジング(不正な文字列の無効化)や、「静的プレースホルダ」の活用が上げられます。
 静的プレースホルダとは、DBMSが用意したプレースホルダ(プリペアードステートメント等)のことで、動的プレースホルダとは、パラメータをアプリケーション側でSQL文に埋め込む方式のことです。

イ 不正解
 クロスサイトスクリプティングは主に外部サイトのスクリプトを動作させることで引き起こされるため、外部サイトのスタイルシートを許容するのは攻撃の成功率を高めてしまいます。※スタイルシートは通常Webサイトの見た目を装飾するものですが、スタイルシートの中に埋め込んだスクリプトを実行することも可能です。
 そのため、対策としては外部サイトのスタイルシートは利用させない、ユーザーにスタイルシートの入力も許可しない方がよいです。

ウ 不正解
 不正なGETリクエストを発生させる手法は多岐に渡るため、クロスサイトリクエストフォージェリの対策としては必要な場面以外ではGETメソッドを極力許可しないのが有効です。POSTメソッドもリファラのURLが不正でないかチェックしたり、正常なPOSTであることを検出するトークンを埋め込むのも有効な対策です。

エ 不正解
 セッションハイジャックとは、他人のセッションIDを推測または盗難して乗っ取ることで、他人になりすます攻撃です。セッションハイジャック対策としては、セッションIDはなるべくランダムで推測しにくいものにする必要があります。また、利用者ごとに固定のセッションIDでは一度攻撃者にバレたセッションIDが何度でも利用可能なので不適切です。