全体
クロスサイトスクリプティングとクロスサイトリクエストフォージェリについて問われている
ページ2
●図1 画面遷移について
ポイント:ユーザー認証が必要な画面と必要でない画面を見極める
ユーザー認証が不要な画面:クロスサイトスクリプティング脆弱性を中心に問題文を読み進める
ユーザー認証が必要な画面:クロスサイトリクエストフォージェリ脆弱性を中心に問題文を読み進める
ページ3
●表1 画面遷移に受け渡すパラメタについて
ポイント:個人情報と思われるパラメタに線を引き、そのパラメタを受け渡ししている画面遷移をマークする
●キーワード
クロスサイトスクリプティング
攻撃者の作成したスクリプトを脆弱性のある標的サイトのドメインの権限において閲覧者のブラウザで実行させる攻撃一般を指す[3]。
斜体で書いた部分がXSS攻撃の重要な特徴であり、この特徴により標的サイトの権限がないと実行できないようブラウザが制限している(同一生成元ポリシー)はずの行動を、攻撃者に実行可能にしてしまう[。
クロスサイトリクエストフォージェリ
CSRF脆弱性とは以下のような攻撃(CSRいっくF攻撃)を可能にする脆弱性を指す:攻撃者はブラウザなどのユーザ・クライアントを騙し、意図しないリクエスト(たとえばHTTPリクエスト)を Web サーバに送信させる。Webアプリケーションがユーザ・クライアントからのリクエストを十分検証しないで受け取るよう設計されている場合、このリクエストを正規のものとして扱ってしまい、被害が発生する。
CSRF攻撃はURL、画像の読み込み、XMLHttpRequestなどを利用して実行される。
ページ4
●クロスサイトスクリプティング脆弱性の原因となった部分を含むソースコードについて
以下、ポイントを箇条書きにする
・HttpServletを継承しているので、Javaサーブレットとして動作する
・サーブレットはリクエストURIにクラス名が含まれる
・HttpServletRequestから取得した値をそのままHttpServletResponseのストリームに書き込んでいる部分に問題がある。画面から入力された値をそのまま画面へ出力することはクロスサイトスクリプティングの原因となる。例えば、画面から入力された値にページを書き換えるJavaScriptが埋め込まれている場合、JavaScriptのDomにより悪意のあるページに書き換えられてしまう
ページ5
●クロスサイトスクリプティングの手口
・攻撃者が悪意のあるURLを被害者にクリックさせるケース
クロスサイトスクリプティング脆弱性があるサイトのURLのリクエストトークンに攻撃者が悪意のあるスクリプトを埋め込みメールや掲示板等にリンクを張ることで、被害者に悪意のあるスクリプトを埋め込んだURLをクリックさせるように誘導する
・フレームを悪用するケース
ブラウザにはSOPという仕組みがありフレームを用いて異なるドメインのページをブラウザに表示することはできない
しかし、HTMLそのものにはSOPの効力は及ばない。
クロスサイトスクリプティング脆弱性によりHTMLを直接書き換えるような悪意のあるスクリプトを含むURLがフレームのsrc属性に指定されているとき、ブラウザのSOP機能が迂回されてしまうため、ブラウザ上に悪意のあるサイトをj表示させることが可能になる
ページ6
●クロスサイトリクエストフォージェリ対策について
ユーザー認証した後の画面に対して、以下の対策を実施する
・POSTメソッドによるアクセスだけを用いる
・前画面でHTMLフォーム内にランダムな値をHiddenフィールドの値として埋め込む
・画面遷移時に受信したデータが埋め込んだランダムな値と一致するか確認する
なお、ユーザー認証を伴わない画面遷移にはこれらの対策を行う必要はない
ページ7
●クロスサイトスクリプティングが発生した要因と対策について
(発生した要因)
入力検証をクライアント側のみで行っており、サーバーサイドで入力検査をしていないことに問題があった。
クライアント側の入力チェックはショートカットできる手段がいくつもある
(対策)
・入力値チェックはサーバーサイド側でも行う
・画面に出力する文字列をJavaScriptが実行できないように検査する必要がある
具体的には
・特殊文字列をエスケープする
・URLを出力する場所ではjavascript:などの文字列を抑止する