基本情報技術者試験「クロスサイトスクリプティング」の問題
N社の掲示板サービスで、利用者が投稿した内容をそのままWebページに表示している。ある投稿を閲覧した別の利用者のブラウザ上で、投稿に仕込まれたスクリプトが実行され、Cookieが外部へ送信される事象が起きた。この問題への根本対策として、最も適切なものはどれか。
ア投稿の保存時にscriptという語を含む文字列を検出して除去する。
イ表示時に出力先の文脈に応じて特殊文字を実体参照へ変換する。
ウ投稿者ごとに一日あたりの投稿可能件数の上限を設けて運用する。
エページ全体の表示処理に外部のWAF製品を導入して通信を監視する。
正解
イ.表示時に出力先の文脈に応じて特殊文字を実体参照へ変換する。
原因は『投稿内容を無加工でHTMLに出力している』ことである。表示(出力)時に、出力先の文脈に応じて<や>、&などの特殊文字をHTMLの実体参照(エンティティ)へ変換すれば、投稿に含まれるスクリプトはタグではなく単なる文字列として表示され、ブラウザ上で実行されなくなる。これがXSSの根本対策である。
?選択肢ごとの解説
ア ×scriptという語の除去はブラックリスト的対策で、別タグやイベント属性、エンコードによる回避が容易で、注入経路を網羅できない。
イ ○原因は『投稿内容を無加工でHTMLに出力している』ことである。表示(出力)時に、出力先の文脈に応じて<や>、&などの特殊文字をHTMLの実体参照(エンティティ)へ変換すれば、投稿に含まれるスクリプトはタグではなく単なる文字列として表示され、ブラウザ上で実行されなくなる。これがXSSの根本対策である。
ウ ×投稿件数の上限は投稿の量を抑えるだけで、一件の投稿に仕込まれたスクリプトが閲覧者の画面で実行される事実を変えない。
エ ×WAFは既知パターンの検知に有用だが網羅性に限界があり、未知の変形を取りこぼすため、出力時の無害化に代わる根本対策にはならない。
✎くわしく
XSSは『利用者入力がスクリプトとして解釈される』ことが本質である。対策の要は入力ではなく出力時の文脈に応じたエスケープであり、HTML本文・属性値・JavaScript内など出力先ごとに適切な処理を行う点が重要である。
✓本番での押さえどころ
試験のコツ
XSS対策の核心は出力時の文脈に応じたエスケープ(無害化)。投稿をそのまま表示している記述があればエスケープを選ぶ。
覚え方
『画面に出す前に牙を抜く』。出力時にタグ文字をエスケープすれば噛まれない。
よくある誤り
語句の除去やWAF頼みで防げると考えがちだが、回避が容易で網羅できないため、肝は出力時にスクリプトとして解釈させないことである。
情報セキュリティの他の問題
A社の経理担当者が、取引先を装ったメールに添付された請求書ファイルを業務PCで開いたところ、見慣れない画面が一瞬表示されて消…B社のWebサービスで、複数の利用者アカウントに対し正しいIDとパスワードの組合せによるログインが短時間に外部から成立する事…C社では、退職予定者や異動者のアカウント権限の見直しが滞り、業務上不要になった共有フォルダへのアクセス権が残り続けている。情…D社のファイルサーバがランサムウェアに感染し、業務ファイルが暗号化された。D社は日次でバックアップを取得しているが、バックア…E社の従業員に、取引先銀行を名乗る『口座情報の更新が必要』というメールが届いた。本文中のリンク先URLにアクセスすると、銀行…F社は社外の従業員が、カフェなどの公衆無線LANを利用して社内システムへアクセスしている。通信内容が経路上で第三者に盗聴・改…
この問題を、AIの8-ways解説つきで。
無料ではじめる →基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。
ukamiru 過去問 · 基本情報技術者試験 · fe-b-sec-0014