情報セキュリティ

基本情報技術者試験クロスサイトスクリプティング」の問題

情報セキュリティ情報セキュリティ難易度:normal
あるサイトの検索結果画面は、利用者がURLで渡した検索語を『〇〇の検索結果』という形でHTML本文にそのまま出力している。細工した検索語を含むURLを被害者に踏ませると、被害者のブラウザでスクリプトが実行される反射型XSSが指摘された。この問題への根本対策として、最も適切なものはどれか。
画面へ出力する直前に、出る先の文脈に応じて特殊文字を無害な表記へ置き換えてから渡す。
検索語に使える文字数の上限を短く設定し、それより長い検索語は受け付けないようにする。
検索結果画面のURLを利用者ごとに毎回異なる値とし、同じURLを後から再び使えないように変える。
検索機能の利用にログインを必須とし、未ログインの状態での検索は行えないように制限する。
正解
画面へ出力する直前に、出る先の文脈に応じて特殊文字を無害な表記へ置き換えてから渡す。

反射型XSSの原因は、要求パラメータの検索語を無加工でHTMLに出力している点にある。画面へ出力する直前に、出る先がHTML本文か属性かなどの出力文脈に応じて<や>、&などの特殊文字を無害な表記へ置き換えれば、細工された検索語はタグではなく単なる文字列として表示され、ブラウザ上でスクリプトとして実行されなくなる。これが根本対策である。

?選択肢ごとの解説

ウ ○反射型XSSの原因は、要求パラメータの検索語を無加工でHTMLに出力している点にある。画面へ出力する直前に、出る先がHTML本文か属性かなどの出力文脈に応じて<や>、&などの特殊文字を無害な表記へ置き換えれば、細工された検索語はタグではなく単なる文字列として表示され、ブラウザ上でスクリプトとして実行されなくなる。これが根本対策である。
ア ×文字数上限の短縮は入力長を制限するだけで、攻撃に必要な短いスクリプトは収まるため、スクリプトの実行は防げない。
イ ×URLを毎回異なる値にしても、被害者を踏ませる細工URLにその値を含めれば成立するため、反射型XSSの実行自体は阻止できない。
エ ×ログイン必須化は利用者を限定するだけで、認証後の利用者や奪取アカウントを踏ませれば成立し、出力時にスクリプトが実行される問題を解消しない。

くわしく

XSSは入力ではなく『出力時にスクリプトとして解釈されること』が本質であり、対策の要は出力文脈(HTML本文・属性値・JavaScript内・URL内など)に応じた適切なエスケープである。反射型でも格納型でも、根本対策はこの出力時無害化で共通する。

本番での押さえどころ

試験のコツ

反射型・格納型を問わずXSSの根本対策は出力時の文脈に応じたエスケープ。入力長やログイン制御では防げない。

覚え方

反射型も『画面に出す前に牙を抜く』。URL由来の値もそのまま出さずエスケープ。

よくある誤り

文字数制限やログイン制御で防げると考えがちだが、XSSは短いコードでも成立し、肝は出力時にスクリプトとして解釈させないことである。

情報セキュリティの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-sec-0107

【基本情報技術者試験】クロスサイトスクリプティングの問題 — 解答・解説|ukamiru 過去問