平成28年度 秋期 システムアーキテクト試験 午前Ⅱ 問24

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

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

正解: ア. 攻撃:SQL インジェクション / 対策:SQL 文の組立てに静的プレースホルダを使用する。

SQLインジェクションは、Webアプリケーションがデータベースに送信するSQL文の組立てに不備がある場合に、悪意のある入力値によって想定外のSQL文を実行させ、データベースを不正に操作する攻撃です。

この対策として、SQL文の雛形をあらかじめ用意し、あとから実際の値をバインド(割り当て)する仕組みであるプレースホルダ(特にデータベース側でコンパイルを行う静的プレースホルダ)を使用することが最も根本的かつ有効な解決策です。これにより、外部からの入力値がSQLの構文(命令)として解釈されることを確実に防ぐことができます。したがって、正解はアです。

各選択肢の解説

  • ア:正解です。SQLインジェクションの根本的な対策として、SQL文の組立てに静的プレースホルダ(プリペアドステートメント)を使用することは適切です。
  • イ:誤りです。クロスサイトスクリプティング(XSS)は、悪意のあるスクリプトをWebページに埋め込み、閲覧者のブラウザ上で実行させる攻撃です。任意の外部サイトのスタイルシート(CSS)を取り込めるようにすると、スタイルシート内に悪意のあるスクリプトを仕込まれる危険性があり、かえってXSSの脆弱性を生み出してしまいます。対策としては、HTML出力時のエスケープ処理(サニタイジング)や、外部からのスタイルシートの取り込みを禁止・制限することなどが挙げられます。
  • ウ:誤りです。クロスサイトリクエストフォージェリ(CSRF)は、ログイン中の利用者に罠のリンクを踏ませるなどして、意図しないリクエストを送信させる攻撃です。リクエストにGETメソッドを使用すると、URLのパラメータだけで簡単に攻撃リクエストを作成できてしまうため、むしろ危険性が高まります。対策としては、重要な処理のリクエストにはPOSTメソッドを使用することに加え、秘密情報(トークン)の埋め込みやパスワードの再入力などを実装する必要があります。
  • エ:誤りです。セッションハイジャックは、正規の利用者のセッションIDを推測や盗聴などによって不正に入手し、その利用者になりすます攻撃です。利用者ごとに固定のセッションIDを使用すると、一度セッションIDが漏洩・推測された場合に永続的になりすましが可能になってしまいます。対策としては、推測困難な乱数を用いてセッションIDを動的に生成し、ログイン成功時などにセッションIDを再発行(変更)することが必要です。

Spineチーム