情報処理安全確保支援士試験 令和5年度 秋期 午後 問1
【出典:情報処理安全確保支援士試験 令和5年度 秋期 午後 問1(一部、加工あり)】
問1 Webアプリケーションプログラムの開発に関する次の記述を読んで、設問に答えよ。
Q社は、洋服のEC事業を手掛ける従業員100名の会社である。WebアプリQというWebアプリケーションプログラムでECサイトを運営している。ECサイトのドメイン名は”□□□.co.jp”であり、利用者はWebアプリQにHTTPSでアクセスする。WebアプリQの開発と運用は、Q社開発部が行っている。今回、WebアプリQに、ECサイトの会員による商品レビュー機能を追加した。図1は、WebアプリQの主な機能である。
ある日、会員から、無地Tシャツのレビューページ(以下、ページVという)に16件表示されるはずのレビューが2件しか表示されていないという問合せが寄せられた。開発部のリーダーであるNさんがページVを閲覧してみると、画面遷移上おかしな点はなく、図2が表示された。
WebアプリQのレビューページでは、次の項目がレビューの件数分表示されるはずである。
- レビューを投稿した会員のアイコン画像
- レビューを投稿した会員の表示名
- レビューが投稿された日付
- レビュー評価(1〜5個の★)
- 会員が入力したレビュータイトル
- 会員が入力したレビュー詳細
不審に思ったNさんはページVのHTMLを確認した。図3は、ページVのHTMLである。
図3のHTMLを確認したNさんは、会員Aによって15件のレビューが投稿されていること、及びページVには長いスクリプトが埋め込まれていることに気付いた。Nさんは、ページVにアクセスしたときに生じる影響を調査するために、アクセスしたときにWebブラウザで実行されるスクリプトを抽出した。図4は、Nさんが抽出したスクリプトである。
Nさんは、会員Aの投稿はクロスサイトスクリプティング(XSS)脆弱性を悪用した攻撃を成立させるためのものであるという疑いをもった。NさんがWebアプリQを調べたところ、WebアプリQには、会員が入力したスクリプトが実行されてしまう脆弱性があることを確認した。加えて、WebアプリQがcookieにHttpOnly属性を付与していないこと及びアップロードされた画像ファイルの形式をチェックしていないことも確認した。
Q社は、必要な対策を施し、会員への必要な対応も行った。
図3について、入力文字数制限を超える長さのスクリプトが実行されるようにした方法を、50字以内で答えよ。:HTMLがコメントアウトされ一つのスクリプトになるような投稿を複数回に分けて行った。
図3を読み解いていきましょう。
- 1件目のレビュー
<div class=”review”>
<div class=”icon”><img src=”/users/dac6c8f12f867ed5/icon.png”></div>
<div class=”displayname”>会員A</div>
<div class=”date”>2023年4月10日</div><div class=”star”>★★★★★</div>
<div class=”review-title”>Good<script>xhr=new XMLHttpRequest();/*</div>
<div class=”description”>a</div> - 2件目のレビュー
<div class=”review”>
<div class=”icon”><img src=”/users/dac6c8f12f867ed5/icon.png”></div>
<div class=”displayname”>会員A</div>
<div class=”date”>2023年4月10日</div><div class=”star”>★★★★★</div>
<div class=”review-title”>*/url1=”https://□□□.co.jp/users/profile”;/*</div>
<div class=”description”>a</div> - (省略)
- 15件目のレビュー
<div class=”review”>
<div class=”icon”><img src=”/users/dac6c8f12f867ed5/icon.png”></div>
<div class=”displayname”>会員A</div>
<div class=”date”>2023年4月10日</div><div class=”star”>★★★★★</div>
<div class=”review-title”>*/xhr2.send(form);/</script/></div>
<div class=”description”>Nice shirt!</div>
太字の部分は、1件目のレビューの<script>タグから、15件目のレビューの<script>タグで囲まれた部分をJavaSciptとして実行するもので、つなげると図4に示すスクリプトになることが分かります。
そして、ピンクで示す部分は、「/*」と「*/」で囲まれる部分をコメントアウトするもので、スクリプトでは実行されません。
なぜこのように複数のレビューに分けているかというと、設問にあるようにレビュータイトルには50文字の入力文字制限があるからです。
50文字を超えるスクリプトを、複数のHTML分をコメントアウトすることで一つのスクリプトになるようにしています。