読み込み中...クロスサイトスクリプティング (Cross Site Scripting) とは、動的にWebページを生成するアプリケーションのセキュリティ上の不備を意図的に利用し、狭義にはサイト間を横断して悪意のあるスクリプトを混入させること。また、それを許す脆弱性のこと。広義にはスクリプトを混入させずとも、任意の要素を混入させられうる脆弱性を含む。略記としてCSS、XSSがある。CSSは同分野でよく使用されるCascading Style Sheetsの略でもあるので、混乱を避けるためにXSSと表記されることが多い。
攻撃者が対象となるサイトとは異なるサイトからスクリプトを送り込み、訪問者に実行せしめることから、クロスサイト(サイトを横断した)スクリプティング(スクリプト処理)と呼ばれる。
ウェブアプリケーションが入力したデータ(フォーム入力など)を適切にエスケープしないままHTML中に出力することにより、入力中に存在するタグ等文字がそのままHTMLとして解釈される。ここでスクリプトを起動させることにより、以下に挙げるような攻撃が成立する。これらの攻撃が成立することにより、秘密情報の窃取や、回復不可能な権利侵害につながるおそれがある。
フォームから入力された情報を表示するサイトがあり、このサイトでは以下のようなWebページを動的に生成していると仮定する。
Hello, (フォームで入力した値)
このサイトにおいて、フォームにJavaScriptのコード(例えば、<script>alert("警告")</script>)を入力したとする。このサイトが、入力を適切にエスケープしていない場合、上記のページは以下のように生成される。
Hello,
このページを受信したWebブラウザは、このスクリプトを実行し、画面上に「警告」と表示されたメッセージボックスを出力する。
& を & に、< を < に、> を > に、" を " に、それぞれ置換する。
# タグの属性値は必ず "〜" (ダブルクオート)で括る。また属性値中のエスケープを忘れない。例: <input type="hidden" name="foo" value="<script>">
例外は以下のような場合である。
基本的にはWebサイト側の脆弱性を突いて、Webサイトにアクセスした利用者に任意のスクリプトを実行さしめる状況であるため、Webサイト管理者側が脆弱性対策を行わずに放置したような場合、サイト利用者側が取れる根本的な対策は殆どない。
利用者側のポリシーとして「怪しいサイトには行かない」では不十分であり、「脆弱性の対策をしていないサイトは利用しない」と言う、一般人は有効に適用できそうもないポリシーを取るしかない。
その唯一の例外としては、ブラウザーのスクリプト(Java/ActiveXなどを含む)を無効にすること、スクリプトや動的生成ページを使用しない静的ページのみにアクセスを限定する、と言う程度であろう。
読み込み中...