平成28年度 秋期 システムアーキテクト試験 午前Ⅱ 問24
テクノロジセキュリティ技術Webアプリケーション・ソフトウェアの脆弱性
安全な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を再発行(変更)することが必要です。