クロスサイトスクリプティング (クロスサイトスクリプティング) とは | 意味や読み方など丁寧でわかりやすい用語解説

作成日: 更新日:

クロスサイトスクリプティング (クロスサイトスクリプティング) の読み方

日本語表記

クロスサイトスクリプティング (クロスサイトスクリプティング)

英語表記

Cross-site scripting (クロスサイトスクリプティング)

クロスサイトスクリプティング (クロスサイトスクリプティング) の意味や用語解説

クロスサイトスクリプティングは、Webアプリケーションの代表的な脆弱性の一つであり、一般的にXSSと略される。この名称は、本来の略称であるCSSがカスケーディングスタイルシートと重複するため、区別のためにCrossのXを当ててXSSと呼ばれるようになった経緯がある。この攻撃は、攻撃者が動的にWebページを生成するアプリケーションの不備を利用して、悪意のあるスクリプトをWebサイトに埋め込み、そのサイトを閲覧した他のユーザーのブラウザ上で実行させる手法である。スクリプトが実行されることにより、ユーザーの個人情報やセッション情報を管理するCookieの窃取、Webサイトの表示内容の改ざん、偽のログインフォームの表示による認証情報の詐取、マルウェアのダウンロード誘導など、多岐にわたる被害が発生する可能性がある。攻撃の対象はWebサーバーではなく、そのWebサイトを信頼して利用しているユーザーである点が特徴だ。 クロスサイトスクリプティングの攻撃が成立する根本的な原因は、Webアプリケーションがユーザーからの入力値を信頼し、適切な検証や無害化処理を行わずにHTMLの一部として出力してしまうことにある。例えば、ユーザーがコメントを投稿できる掲示板サイトを想定する。攻撃者がコメント入力欄に、情報を盗み出すためのJavaScriptコードを記述したHTMLタグ(例:`<script>...</script>`)を埋め込んで投稿する。もし、この掲示板アプリケーションが投稿された文字列を何ら処理せずにデータベースに保存し、他のユーザーがその投稿を閲覧する際にそのままHTMLとしてページに表示した場合、閲覧したユーザーのブラウザはそれを正規のHTMLタグおよびスクリプトとして解釈し、実行してしまう。結果として、攻撃者の意図した通りにスクリプトが動作し、ユーザーのCookie情報が攻撃者のサーバーへ送信されるといった被害が生じる。 クロスサイトスクリプティングは、攻撃スクリプトがどのようにしてターゲットのブラウザに届けられるかによって、いくつかの種類に分類される。最も代表的なものは「格納型XSS」と「反射型XSS」である。格納型XSSは、先述の掲示板の例のように、攻撃者が投稿した悪意のあるスクリプトがWebアプリケーションのデータベースなどに永続的に保存されるタイプを指す。この場合、脆弱性のあるページにアクセスした不特定多数のユーザーが被害に遭う可能性があり、影響範囲が広範かつ深刻になりやすい。一方、反射型XSSは、悪意のあるスクリプトがURLのパラメータなどに含まれる形で攻撃が行われる。攻撃者は、罠となるURLを作成し、メールやSNSなどを通じてユーザーにクリックさせる。ユーザーがそのURLにアクセスすると、URLに含まれていたスクリプトがサーバーに送られ、サーバーからの応答HTML内にそのスクリプトが埋め込まれて返される。そして、ユーザーのブラウザが応答を解釈する際にスクリプトが実行される。スクリプトはデータベースには保存されず、その場限りで実行されるため、反射型と呼ばれる。この他に「DOMベースXSS」という種類も存在する。これは、サーバー側は正規のページを返すものの、ブラウザ側で動作するJavaScriptがURLのフラグメント識別子(#以降の文字列)などを不適切に処理し、DOMを操作してページ内にスクリプトを埋め込んでしまうことで発生する。サーバー側のログには不正な入力が残らない場合があり、検知が困難なことがある。 これらの脅威からWebアプリケーションを保護するためには、開発者がセキュリティを意識した実装を行うことが不可欠である。最も基本的かつ重要な対策は、ユーザーからの入力値など、Webページに出力する全てのデータに対して適切なエスケープ処理を施すことだ。エスケープ処理とは、HTMLにおいて特別な意味を持つ文字(`<`、`>`、`&`、`"`、`'`など)を、単なる文字列として表示されるための別の文字列(HTMLエンティティ)に変換する処理である。これにより、ブラウザは悪意のある文字列をスクリプトとして実行することなく、安全に表示できる。また、入力値を受け取る際には、その値が想定されるデータ型やフォーマット、文字種に合致しているかを検証する入力値検証(バリデーション)も重要となる。さらに、HTTPレスポンスヘッダにContent Security Policy (CSP) を設定し、信頼できるドメインからのみスクリプトの読み込みを許可するようにブラウザに指示することで、万が一XSS脆弱性が存在した場合でも被害を軽減できる。セッションCookieを盗まれるリスクに対しては、CookieにHttpOnly属性を付与し、JavaScriptからのアクセスを禁止することも有効な対策となる。これらの複数の防御策を組み合わせる多層防御の考え方が、安全なWebアプリケーションを構築する上で極めて重要である。

クロスサイトスクリプティング (クロスサイトスクリプティング) とは | 意味や読み方など丁寧でわかりやすい用語解説