安全なWebアプリケーションの作り方|情報処理安全確保支援士 令和3年 春期午前Ⅱ試験 問12

出典:令和3年春期 午前Ⅱ 問12 分野:セキュリティ / セキュリティ実装技術
安全なWebアプリケーションの作り方について,攻撃と対策の適切な組合せはどれか。
攻撃 対策
SQLインジェクション SQL文の組立てに静的プレースホルダを使用する。
クロスサイトスクリプティング 任意の外部サイトのスタイルシートを取り込めるようにする。
クロスサイトリクエストフォージェリ リクエストにGETメソッドを使用する。
セッションハイジャック 利用者ごとに固定のセッションIDを利用する。
  • ア: 
  • イ: 
  • ウ: 
  • エ: 
解説

Webアプリケーションへの代表的な攻撃手法は、「どこを悪用するか」で整理すると分かりやすくなります。

攻撃手法 狙い・特徴 具体例
SQLインジェクション 入力欄などにSQL文を紛れ込ませ、データベースに想定外の命令を実行させる攻撃 ログイン画面や検索フォームを悪用して、情報を不正に取得・改ざんする
クロスサイトスクリプティング Webページに悪意のあるスクリプトを埋め込み、利用者のブラウザ上で実行させる攻撃 掲示板やコメント欄などを悪用して、cookieを盗んだり偽画面を表示したりする
クロスサイトリクエストフォージェリ ログイン中の利用者に、本人が意図しない操作を別サイトで実行させる攻撃 会員情報の変更、商品の注文、パスワード変更などを勝手に実行させる
セッションハイジャック cookieやセッションIDを盗み、利用者になりすましてログイン状態を乗っ取る攻撃 盗んだセッションIDを使い、本人のアカウントとしてWebサービスを利用する

SQLインジェクションはデータベースへの命令を悪用する攻撃、クロスサイトスクリプティングは利用者のブラウザでスクリプトを実行させる攻撃です。

クロスサイトリクエストフォージェリは、ログイン中の利用者に意図しない操作をさせる攻撃です。セッションハイジャックは、セッション情報を盗んでログイン状態そのものを乗っ取る攻撃です。

つまり、SQLインジェクションは「データベースを攻撃」、クロスサイトスクリプティングは「利用者のブラウザを悪用」、クロスサイトリクエストフォージェリは「利用者に勝手な操作をさせる」、セッションハイジャックは「ログイン状態を奪う」と整理すると分かりやすいです。

SQLインジェクション

したがって、が適切です。

❌他選択肢が誤りの理由
イ:クロスサイトスクリプティング/任意の外部サイトのスタイルシートを取り込めるようにする。
⇒クロスサイトスクリプティングは、Webページに不正なスクリプトを埋め込ませ、利用者のブラウザ上で実行させる攻撃です。対策としては、出力時のエスケープ処理や入力値の検証などが重要です。任意の外部サイトのスタイルシートを取り込めるようにすることは、対策ではなく、外部コンテンツを悪用されるリスクを高める可能性があります。
ウ:クロスサイトリクエストフォージェリ/リクエストにGETメソッドを使用する。
⇒クロスサイトリクエストフォージェリは、利用者がログイン済みであることを悪用し、利用者の意図しないリクエストを送信させる攻撃です。対策としては、CSRFトークンの付与や重要処理での再認証などが有効です。GETメソッドを使用することは対策ではなく、状態変更を伴う処理をGETで行うと、むしろ不正なリクエストを誘発しやすくなります。
エ:セッションハイジャック/利用者ごとに固定のセッションIDを利用する。
⇒セッションハイジャックは、セッションIDを盗み取るなどして、利用者になりすます攻撃です。対策としては、ログイン後のセッションIDの再発行、推測困難なセッションIDの使用、HTTPSによる通信保護などが重要です。利用者ごとに固定のセッションIDを使うと、セッションIDが漏えいした場合に長期間悪用されるおそれがあり、対策として不適切です。
TSUNAGARU-ADVICE

まず押さえたいこと

SQLインジェクション対策では、SQL文を文字列連結で組み立てず、プレースホルダを使用して入力値を安全に扱うことが重要です。特に、静的プレースホルダを使うことで、入力値がSQL文の一部として解釈されにくくなります。

迷ったときの判断軸

クロスサイトスクリプティング対策として任意の外部スタイルシートを取り込めるようにするのは不適切です。CSRF対策ではGETメソッドにするのではなく、トークンの利用や重要処理での再認証などが有効です。セッションハイジャック対策では、固定のセッションIDではなく、推測されにくく適切に更新されるセッションIDを使う必要があります。

科目Bにつなげるために

科目Bでは、攻撃名だけでなく、入力値がどこでどのように解釈されるかを読み取る力が問われます。SQLインジェクションはSQL文、XSSはHTMLやJavaScript、CSRFは利用者の意図しないリクエスト、セッションハイジャックはセッションIDの悪用というように、攻撃対象と対策をセットで整理しておきましょう。