情報処理安全確保支援士 2017年 春期 午後1 問02
Webサイトのセキュリティ対策に関する次の記述を読んで、設問1~3に答えよ。
E社は、従業員数200名の情報サービス事業者である。E社は、3年前からWebサイトα(以下、サイトαという)を利用して、次のような機能をもつ会員制の飲食店情報提供サービスを行っている。
・飲食店情報の検索
・飲食店情報に関する掲示板での投稿
・新規登録情報の、会員への電子メール(以下、メールという)による通知
サイトαに対する脆弱性修正プログラムの適用や、コンテンツ作成などの日々の作業は、情報提供サービス担当チームが行っている。チームはリーダのQさんと5名のメンバで構成されている。サイトαで稼働しているWebアプリケーションソフトウェアは、情報提供サービス担当チームがベンダに開発と保守を委託している。サイトαの画面遷移図を図1に、画面遷移の仕様を表1に示す。


〔利用者からの問合せ〕
ある日、サイトαの利用者L氏から、“今朝9時にログインし、サイトαを利用していたら、10時に急にログアウトさせられ、その後ログインできなくなった。パスワードを再設定しようとしたが、エラーが表示され、再設定できない。”という内容のメールがE社宛てに届き、他にも同様の問合せが数件来た。
情報提供サービス担当チームのXさんがサイトαの会員情報データベースにアクセスし、L氏の情報を確認したところ、退会処理が完了していた。Xさんは、誰かが嫌がらせ目的でL氏のアカウントで不正ログインし、退会処理を行った可能性を疑った。①Xさんは、L氏に詳細な利用状況を確認し、その確認内容とログイン記録を照合した結果から、L氏のアカウントは少なくとも今日は不正ログインされていないとの結論に至った。
Xさんが、ログインできなくなる前にどのような操作をしたかをL氏に聞いたところ、サイトα内の掲示板に投稿していた人のプロフィール画面を見て、そこに記載されていたリンクをクリックしたとのことであった。リンク先は、別サイトのURLであり、かつ、Xさんが確認した時点ではリンク先は既に削除されていた。
Xさんは、今回の事象が起きたのはサイトαに脆弱性があるからかもしれないと考え、セキュリティ専門業者J社にWebアプリケーションソフトウェアの脆弱性検査(以下、WebAP検査という)を依頼することにした。WebAP検査の結果、脆弱性が二つ(以下、脆弱性1、脆弱性2という)検出された。
〔脆弱性1について〕
脆弱性1はaの脆弱性であった。脆弱性1を確認した手順を表2に示す。


次は、XさんがJ社の情報処理安全確保支援士K氏から、脆弱性1についての報告を受けた時の会話である。
Xさん:開発委託時の要件にaの脆弱性への対策を含めていたので、脆弱性1の対策はできていると思っていました。
K氏:対策を試みたけれど、プログラムの実装に不備があったようです。プロフィール確認画面についても脆弱性1が確認されています。
Xさん:そうですか。退会処理が行われてしまった利用者がクリックしたリンク先はどのようなものだったのでしょうか。
K氏:例えば、図2のようなHTMLです。このHTMLは、表2中の項番bのような動作をWebブラウザにさせます。
Xさん:変更操作がある画面のうち、パスワード変更画面は、そもそもaの脆弱性への対策をしていませんが、問題ありませんか。
K氏:パスワード変更画面では表1にあるように、cを入力させる仕様です。cは攻撃者がd情報であることを前提としてよいので、問題ありません。画面遷移(お)のような実装の不備もないようでした。

〔脆弱性2について〕
脆弱性2は“クロスサイトスクリプティング”であった。脆弱性2を確認したのはプロフィール入力・変更画面であった。次はK氏とXさんとの会話である。
K氏:プロフィール入力・変更画面は、利用者が入力できるHTMLの要素が制限されています。しかし、例えば“<b>”タグ中に、②特定の属性を指定することによってスクリプトの実行が可能です。スクリプト実行の結果、Cookieの属性の設定によっては、Cookieの情報が盗まれます。これを用いて、gが行われ、勝手にプロフィールを閲覧されたり、変更されたりするおそれがあります。
Xさん:そういうことですか。では、利用者が入力できるHTMLの要素の制限は変えずに、hという仕様に変更したいと思います。
K氏:それで問題ありません。
Xさんは、二つの脆弱性について、対策をベンダに依頼した。対策後、J社にWebAP検査を依頼し、問題がないことを確認した。Xさんは、リリース前のWebAP検査の義務化をQさんに提案し、採用された。
設問1:
本文中の下線①について、L氏のアカウントが不正ログインされていないとの結論に至るには、L氏に確認した内容から分かる何の値と、ログイン記録から分かる何の値を抽出して、一致していることが確認できればよいか。それぞれ25字以内で述べよ。
模範解答
L氏に確認した内容:L氏が今日ログインしたと言っている回数
ログイン記録:L氏の利用者IDを用いた今日のログイン回数
解説
解答の論理構成
- 問題文には、L氏が「“今朝9時にログインし、サイトαを利用していたら、10時に急にログアウトさせられ”」と連絡してきたとあります。
- その後の下線①では「Xさんは、L氏に詳細な利用状況を確認し、その確認内容とログイン記録を照合した」と記載されています。
- 何を照合したのかを考えると、攻撃者が別時間帯に不正ログインしていないかを判断する必要があります。
- “詳細な利用状況”として最も確実に本人に確認できるのは「本人が自覚している今日のログイン回数」です。
- 一方、システム側で取得している情報は表1(あ)の「“ログイン記録(利用者IDと時刻)が取得される”」という仕様により「利用者IDごとのログイン回数」を把握できます。
- よって、
・L氏から聞き取る値:「L氏が今日ログインしたと言っている回数」
・ログイン記録から抽出する値:「L氏の利用者IDを用いた今日のログイン回数」
の一致を確認できれば、不正ログイン(=本人が知らない追加ログイン)がなかったと判断できます。
誤りやすいポイント
- 「ログインした時刻そのもの」を照合すると考えがちですが、時刻は複数回のアクセスで増えるため、回数のほうが適切です。
- 「IPアドレス」を比較すると答えたくなりますが、利用者が自宅・職場・モバイルなど複数環境を使う場合があり確証になりません。
- 「ログアウト時刻」を照合するという発想もありますが、システムはログアウト失敗やセッションタイムアウトでも記録が残るため誤判定を招きます。
FAQ
Q: なぜ“回数”で良いのですか?
A: 攻撃者が追加で1回でもログインすると回数がずれるため、不正有無を端的に判定できます。時刻やIPよりシンプルで確実です。
A: 攻撃者が追加で1回でもログインすると回数がずれるため、不正有無を端的に判定できます。時刻やIPよりシンプルで確実です。
Q: ログイン記録に「利用者IDと時刻」しかない場合でも回数を算出できますか?
A: はい。対象日の同一利用者IDの記録件数をカウントすれば回数を得られます。
A: はい。対象日の同一利用者IDの記録件数をカウントすれば回数を得られます。
Q: セッションIDを比較する方法は使えませんか?
A: セッションIDはログインのたびに更新されるため、日内に複数回ログインすると値が変わり、比較対象として安定しません。
A: セッションIDはログインのたびに更新されるため、日内に複数回ログインすると値が変わり、比較対象として安定しません。
関連キーワード: ログイン履歴、セッション管理、利用者認証、不正アクセス検知
設問2:〔脆弱性1について〕について(1)〜(4)に答えよ。
(1)本分中のaに入れる脆弱性の名称を、カタカナ20字以内で答えよ。
模範解答
a:クロスサイトリクエストフォージェリ
解説
解答の論理構成
- 【問題文】には脆弱性1を確認した手順として、表2の項番「3」で
“action_id=submit” だけを送信すると “退会完了” が表示されると示されています。
これは「taikai_token」を送らなくても処理が実行される実装不備を意味します。 - さらに K 氏は
“プロフィール確認画面についても脆弱性1が確認されています”
と述べ、フォームを自動送信する図2の HTML 例を示しています。
図2は <form target="ifrm1" …> →
のように、利用者がリンクを踏むだけで意図しない POST を別ドメインへ送ります。 - リンクをクリックしただけで「退会処理」が実行される点は、利用者のセッションを悪用して不正なリクエストを発生させる攻撃であり、
“利用者が入力操作をしなくてもブラウザが勝手にログイン済みサイトへリクエストを送る”
という特徴を持つことから、これは「クロスサイトリクエストフォージェリ」と一致します。 - 以上より、a に入る脆弱性名は
クロスサイトリクエストフォージェリ
となります。
誤りやすいポイント
- 「トークンがある=対策済み」と早合点し、実装不備による検証漏れを見逃す。
- 図2の HTML を見て「クリックジャッキング」や「クロスサイトスクリプティング」と混同する。
- GET/POST の区別に囚われ、POST なら安全と思い込む。
FAQ
Q: taikai_token が hidden に入っていれば十分では?
A: 送信時にサーバ側でトークン値を必須チェックしないと無効です。今回の実装は「トークン未送信でも処理」を許しているため脆弱です。
A: 送信時にサーバ側でトークン値を必須チェックしないと無効です。今回の実装は「トークン未送信でも処理」を許しているため脆弱です。
Q: 図2は iframe を使っていますが、iframe 自体が問題なのでしょうか?
A: iframe は単に自動送信を隠すための手段です。本質は「別サイトから利用者のセッションを利用してリクエストを送る」点にあります。
A: iframe は単に自動送信を隠すための手段です。本質は「別サイトから利用者のセッションを利用してリクエストを送る」点にあります。
Q: パスワード変更画面はなぜ問題にならないのですか?
A: 表1にあるように “cを入力させる仕様” であり、攻撃者が “d情報” を知らなければリクエストを生成できません。CSRF の成立条件が満たされないためです。
A: 表1にあるように “cを入力させる仕様” であり、攻撃者が “d情報” を知らなければリクエストを生成できません。CSRF の成立条件が満たされないためです。
関連キーワード: CSRF, ワンタイムトークン、セッション管理、自動送信フォーム
設問2:〔脆弱性1について〕について(1)〜(4)に答えよ。
(2)本文中のbに入れる表2中の項番を1〜5から選び、数字で答えよ。
模範解答
b:3
解説
解答の論理構成
-
表2の各項番と結果を整理します。
- 項番1:POSTデータに taikai_token=B582DF03524FBB9DBCCE0BA0610F2EA1 を含めた場合 → 「退会完了」。
- 項番2:POSTデータに taikai_token=0 を含めた場合 → 「エラー画面」。
- 項番3:POSTデータに taikai_token を送らず action_id=submit のみ → 「退会完了」。
- 項番4・5:画面遷移(え)を経ずに直接アクセスした場合はいずれも「エラー画面」。
-
図2のHTMLを確認します。行8~11でとまず 退会理由のみを送信し(=画面遷移(え)に相当)、 行13~15でと taikai_token を全く付けずに action_id=submit を送信しています。
-
②で送られるリクエストは、表2の 「POSTデータ:action_id=submit」と同一です。これは表2の項番「3」に該当し、結果は「退会完了」です。
-
したがって、b に入るのは “3” となります。
誤りやすいポイント
- 表2の読取りで「taikai_token=0」を送らないケース(項番3)を見落とす。0 を送るとエラーになるため混同しやすいです。
- 図2のHTMLが二段階で送信している点を理解せず、最初のフォーム(画面遷移(え)相当)だけで判断してしまう。
- 画面遷移(え)を経たあとでなければ脆弱性は起きないと早合点し、項番1を選んでしまう。
FAQ
Q: どうして taikai_token が空でも退会できてしまうのですか?
A: 画面遷移(お)の実装で「トークンの値を比較する」前に「トークン自体が存在するか」を確認していないためです。存在チェックをせずに null とセッション側の null を比較し、誤って一致と判断しています。
A: 画面遷移(お)の実装で「トークンの値を比較する」前に「トークン自体が存在するか」を確認していないためです。存在チェックをせずに null とセッション側の null を比較し、誤って一致と判断しています。
Q: taikai_token=0 ではエラーなのに、パラメータ自体を省略すると退会できるのはなぜ?
A: 値が "0" の場合は文字列比較で不一致となる一方、パラメータ省略時はサーバ側で null 同士の比較になり「一致」と誤判定する実装上のバグだからです。
A: 値が "0" の場合は文字列比較で不一致となる一方、パラメータ省略時はサーバ側で null 同士の比較になり「一致」と誤判定する実装上のバグだからです。
Q: 同じCSRF対策でもパスワード変更画面は安全なのでしょうか?
A: 本文の「パスワード変更画面では表1にあるように、old_passwd を入力させる仕様」から、攻撃者が利用者の現在パスワード(機密情報)を知らない限りCSRF成立条件を満たさないため、安全と評価されています。
A: 本文の「パスワード変更画面では表1にあるように、old_passwd を入力させる仕様」から、攻撃者が利用者の現在パスワード(機密情報)を知らない限りCSRF成立条件を満たさないため、安全と評価されています。
関連キーワード: CSRF, トークンチェック、POSTリクエスト、セッション管理、Webフォーム
設問2:〔脆弱性1について〕について(1)〜(4)に答えよ。
(3)本文中のc、dに入れる適切な字句を、それぞれ10字以内で答えよ。
模範解答
c:現在のパスワード
d:知り得ない
解説
解答の論理構成
- 表1【パスワード変更画面(い)】には
“POSTデータ:… old_passwd=aBcD1234” とあり、要件には
“old_passwdのハッシュ値が、サイトαに登録された現在のセッションをもつ利用者のパスワードのハッシュ値と同じ” と明記されています。
つまり利用者はまず “現在のパスワード” を入力しなければパスワード変更処理に進めません。したがって c に当たる語は「現在のパスワード」です。 - K氏の説明では
“c は攻撃者が d 情報であることを前提としてよい” と述べています。攻撃者が把握していない、すなわち “知り得ない” ことが安全性の前提条件になっているため d には「知り得ない」が入ります。
誤りやすいポイント
- “old_passwd” と “new_passwd1” の区別を取り違え、c を「新しいパスワード」と誤解する。
- “攻撃者が知り得ない” という前提を “攻撃者が知っていると想定する” と読み違え、d を「知っている」としてしまう。
- a(CSRF)の文脈を意識せず、cd がCSRF対策の話ではなく「認証情報の前提」に関する記述である点を見落とす。
FAQ
Q: パスワード変更画面に CSRF トークンを入れなくても安全なのですか?
A: 表1の仕様通り「現在のパスワード」を必須入力にすることで、攻撃者がその値を“知り得ない”限り CSRF の実行は困難と判断できます。
A: 表1の仕様通り「現在のパスワード」を必須入力にすることで、攻撃者がその値を“知り得ない”限り CSRF の実行は困難と判断できます。
Q: 「知り得ない」と断言できる根拠は何ですか?
A: パスワードは利用者本人しか入力できない前提で管理されており、漏えいがなければ第三者は値を取得できないためです。
A: パスワードは利用者本人しか入力できない前提で管理されており、漏えいがなければ第三者は値を取得できないためです。
Q: 新旧パスワードが同じだった場合はどうなりますか?
A: 表1に “old_passwdとnew_passwd1の値が異なる” という条件があるため、同一パスワードでは変更処理が拒否されます。
A: 表1に “old_passwdとnew_passwd1の値が異なる” という条件があるため、同一パスワードでは変更処理が拒否されます。
関連キーワード: CSRF, パスワード認証、セッション管理、入力バリデーション
設問2:〔脆弱性1について〕について(1)〜(4)に答えよ。
(4)図2中のe、fに入れる適切な文字列を、それぞれ10字以内で答えよ。
模範解答
e:confirm
f:submit
解説
解答の論理構成
-
退会処理の流れを確認
【問題文】表1の画面遷移(え)では
POSTデータ:action_id=confirm
とあり、退会理由をサーバへ送信して「退会確認画面」を表示します。
続く画面遷移(お)では
POSTデータ:action_id=submit
を送り、退会処理が行われ 退会完了となります。 -
図2のHTMLが狙う動作
図2には <form ... action="https://www.e-sha.co.jp/member/taikai"> が2つあり、1つ目は taikai_message を含み、2つ目は含みません。これは
・1回目のPOSTで退会理由を送って(え)を実行
・1秒後に2回目のPOSTで(お)を実行
という連続操作を自動化して退会を成立させる意図です。 -
action_id に入る値の決定
(1) 1回目=(え)に相当するため e には confirm が入る。
(2) 2回目=(お)に相当するため f には submit が入る。 -
よって
e:confirm
f:submit
誤りやすいポイント
- 図2の1つ目のフォームに taikai_token が無いことから(お)と勘違いしやすい。POSTデータに taikai_message が含まれている時点で(え)だと判断します。
- 表2の項番「3」で action_id=submit だけで退会できる実装不備が示されているが、図2は確実に退会させるために(え)→(お)の正規手順を踏む体裁にしている点を見落としやすい。
- action_id の値を大文字小文字違いで書くと減点対象になります。表1の表記をそのまま引用する必要があります。
FAQ
Q: taikai_token が無くても退会できる実装不備があるのに、なぜ図2は2段階で送信しているのですか?
A: 実装不備が後日修正されても攻撃が成功するよう、正規の遷移(え)→(お)に従う方が汎用性が高いからです。
A: 実装不備が後日修正されても攻撃が成功するよう、正規の遷移(え)→(お)に従う方が汎用性が高いからです。
Q: 図2の
Q: パスワード変更画面に同じ action_id パラメータがありますが、混同しませんか?
A: パスワード変更画面(い)は action_id=submit だけで完了する仕様です。退会処理とは URL が異なるため衝突しません。
A: パスワード変更画面(い)は action_id=submit だけで完了する仕様です。退会処理とは URL が異なるため衝突しません。
関連キーワード: POSTリクエスト、CSRF, セッション、token, フォームオートサブミット
設問3:〔脆弱性2について〕について、(1)〜(3)に答えよ。
(1)本文中の下線②に該当する属性を解答群の中から全て選び、記号で答えよ。
解答群
ア:accesskey
イ:class
ウ:hidden
エ:id
オ:lang
力:onclick
キ:onmouseover
ク:title
模範解答
カ、キ
解説
解答の論理構成
- 本文には
“K氏:プロフィール入力・変更画面は、利用者が入力できるHTMLの要素が制限されています。しかし、例えば“”タグ中に、②特定の属性を指定することによってスクリプトの実行が可能です。”
とあります。 - 要素自体はスクリプトを実行する機能を持ちません。スクリプトを実行させるにはイベントハンドラ属性など、JavaScript を埋め込める属性を付与する必要があります。
- 解答群のうちイベントハンドラとなるのは
・カ:onclick(クリック時に発火)
・キ:onmouseover(マウスオーバ時に発火)
です。 - その他の属性
ア:accesskey、イ:class、ウ:hidden、エ:id、オ:lang、ク:title
は、値にスクリプトを書いてもブラウザが JavaScript として解釈しません。 - 以上より、スクリプト実行を可能にする“②特定の属性”は**「カ、キ」**となります。
誤りやすいポイント
- title や class に javascript: と書けば動くと思い込む。これらは URL を解釈する属性ではないので実行されません。
- タグが許可されていれば安全と考え、属性までチェックしない。イベントハンドラ属性を許容すると XSS が成立します。
- hidden を危険視してしまう。hidden は要素の表示非表示を制御するだけで、スクリプトを直接実行しません。
FAQ
Q: もし
タグが許可されていた場合も onclick などは危険ですか?
A: はい。
に onclick や onerror を付与すると、画像読み込み失敗時にスクリプトを実行させるなど、さらに攻撃範囲が広がります。
A: はい。
Q: accesskey もキーボード操作を定義する属性ですが、危険ではないのですか?
A: accesskey 自体はショートカットキーを割り当てるだけで JavaScript を実行しません。値に javascript: を書いても無視されます。
A: accesskey 自体はショートカットキーを割り当てるだけで JavaScript を実行しません。値に javascript: を書いても無視されます。
Q: 属性を完全に除外せずに XSS を防ぐ方法はありますか?
A: サーバ側・クライアント側双方でホワイトリスト方式のサニタイズライブラリを用い、許可する属性を限定し、イベントハンドラや javascript: スキームを含む値を遮断する方法が一般的です。
A: サーバ側・クライアント側双方でホワイトリスト方式のサニタイズライブラリを用い、許可する属性を限定し、イベントハンドラや javascript: スキームを含む値を遮断する方法が一般的です。
関連キーワード: クロスサイトスクリプティング、サニタイズ、イベントハンドラ、JavaScript, HTML属性
設問3:〔脆弱性2について〕について、(1)〜(3)に答えよ。
(2)本文中のgに入れる攻撃の名称を15字以内で答えよ。
模範解答
g:セッションハイジャック
解説
解答の論理構成
-
本文には「脆弱性2は“クロスサイトスクリプティング”であった。」とあり、 さらに K 氏は「スクリプト実行の結果、Cookieの情報が盗まれます。これを用いて、gが行われ、勝手にプロフィールを閲覧されたり、変更されたりするおそれがあります。」と説明しています。
→ ここで盗まれるのは Cookie 内の「JSESSIONID」(セッション ID)です。 -
セッション ID が第三者に渡ると、その第三者は被害者の“現在進行中の認証済みセッション”を乗っ取り、被害者になりすまして操作できます。
→ この一連の攻撃は一般に「セッションハイジャック」と呼ばれます。 -
「勝手にプロフィールを閲覧されたり、変更されたりする」という被害は、まさにセッション乗っ取り後の不正操作にほかなりません。
-
したがって g に入る攻撃名は
セッションハイジャック
となります。
誤りやすいポイント
- 「Cookie が盗まれる=クッキー窃取」と直接書いてしまう。攻撃名として求められているのは“盗んだ後に何をするか”であり、正式には「セッションハイジャック」です。
- 「セッションフィクセーション」と混同する。フィクセーションは攻撃者が“固定した”セッション ID を被害者に使わせる手法で、今回は被害者の ID を“奪う”シナリオなので別物です。
- “なりすまし”という日常語をそのまま書き、正式名称で回答しない。
FAQ
Q: XSS が起点なのに、なぜ答えが XSS ではないのですか?
A: XSS は「手段」であり、その結果として Cookie が盗まれ、認証済みセッションを奪う「セッションハイジャック」という「目的の攻撃」が成立します。設問は後者の名称を尋ねています。
A: XSS は「手段」であり、その結果として Cookie が盗まれ、認証済みセッションを奪う「セッションハイジャック」という「目的の攻撃」が成立します。設問は後者の名称を尋ねています。
Q: 「セッション乗っ取り」と書いてもよいですか?
A: 一般的には通じますが、試験では英語由来の正式用語「セッションハイジャック」を求めることが多いため、迷ったらこちらを選んでください。
A: 一般的には通じますが、試験では英語由来の正式用語「セッションハイジャック」を求めることが多いため、迷ったらこちらを選んでください。
Q: Cookie の Secure 属性や HttpOnly 属性を付ければ防げますか?
A: Secure は通信盗聴対策、HttpOnly は XSS からの窃取対策になります。特に HttpOnly を設定していれば、スクリプトから Cookie へアクセスできず、今回の XSS 連動型セッションハイジャックを防止できます。
A: Secure は通信盗聴対策、HttpOnly は XSS からの窃取対策になります。特に HttpOnly を設定していれば、スクリプトから Cookie へアクセスできず、今回の XSS 連動型セッションハイジャックを防止できます。
関連キーワード: クロスサイトスクリプティング、Cookie, セッションID, セッションハイジャック、なりすまし
設問3:〔脆弱性2について〕について、(1)〜(3)に答えよ。
(3)本文中のhに入れる仕様を25字以内で具体的に述べよ。
模範解答
h:タグの中で利用できる属性を制限する
解説
解答の論理構成
- 【問題文】には「“”タグ中に、②特定の属性を指定することによってスクリプトの実行が可能」とあります。ここで ②特定の属性 が攻撃ベクトルであり、HTML タグ自体ではなく“属性”が悪用されています。
- Xさんは「利用者が入力できるHTMLの要素の制限は変えずに、hという仕様に変更したい」と発言しています。すでに「要素(タグ)の制限」は導入済みなので、追加すべきは“属性の制限”であると分かります。
- K氏が「それで問題ありません」と応じているため、要素制限を維持しつつ属性を制御する方針が適切な対策になります。
- 以上から、hには「タグの中で利用できる属性を制限する」を入れるのが妥当です。これにより、スクリプトを呼び出す on* 系や src、style などの危険な属性を除外でき、クロスサイトスクリプティングを防止できます。
誤りやすいポイント
- 「タグを全て禁止する」と誤解するケース
└ 問題文には要素は許可したままにする前提が明記されているため不適切です。 - 「HTMLエンティティ化を行う」と答えてしまうケース
└ エンティティ化は要素自体を無効化してしまい、要件「要素の制限は変えず」に反します。 - 「JavaScriptの実行を禁止する」と漠然と書くケース
└ 具体的な仕様変更内容として“属性を制限する”まで落とし込む必要があります。
FAQ
Q: 要素を許可したまま属性だけ制限すれば本当に安全ですか?
A: 危険な属性(イベントハンドラ、javascript: URI など)をホワイトリスト方式でブロックすれば、少なくともブラウザ側でのスクリプト実行は防止できます。
A: 危険な属性(イベントハンドラ、javascript: URI など)をホワイトリスト方式でブロックすれば、少なくともブラウザ側でのスクリプト実行は防止できます。
Q: 属性制限はどのように実装するのが一般的ですか?
A: サーバ側でホワイトリスト検証ライブラリを用い、許可タグに対して許可属性を列挙し、正規表現やパーサでチェックする方法が一般的です。
A: サーバ側でホワイトリスト検証ライブラリを用い、許可タグに対して許可属性を列挙し、正規表現やパーサでチェックする方法が一般的です。
Q: CSP(Content Security Policy)を導入すれば属性制限は不要ですか?
A: CSP は追加の防御策として有効ですが、入力値自体のサニタイズを省略するのは推奨されません。多層防御の一環として属性制限も行うべきです。
A: CSP は追加の防御策として有効ですが、入力値自体のサニタイズを省略するのは推奨されません。多層防御の一環として属性制限も行うべきです。
関連キーワード: クロスサイトスクリプティング、入力バリデーション、HTMLサニタイズ、ホワイトリスト方式


