クロスサイトスクリプティングとは?

クロスサイトスクリプティング攻撃は、Webブラウザをだまして悪意のあるコードを実行させます。

学習目的

この記事を読み終えると、以下のことができるようになります。

  • クロスサイトスクリプティングを理解
  • クライアント側コードの定義
  • クロスサイトスクリプティング攻撃の結果を説明
  • 反射型クロスサイトスクリプティングと蓄積型クロスサイトスクリプティングの違いを説明
  • クロスサイトスクリプティングを軽減するための戦略の一覧表

関連コンテンツ


さらに詳しく知りたいとお考えですか?

是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!

当社がお客様の個人データをどのように収集し処理するかについては、Cloudflareのプライバシーポリシーをご確認ください。

記事のリンクをコピーする

クロスサイトスクリプティングとは?

クロスサイトスクリプティング(XSS)は、攻撃者が正当なWebサイトにコードを添付し、被害者がWebサイトを読み込んだときに実行される悪用法です。その悪意のあるコードは、いくつかの方法で挿入できます。最も一般的には、URLの最後に追加するか、ユーザー生成コンテンツを表示するページに直接投稿します。技術的には、クロスサイトスクリプティングはクライアント側のコード挿入攻撃です。

クロスサイトスクリプティング攻撃

クライアント側コードとは?

クライアント側コードは、ユーザーの機械で実行されるJavaScriptコードです。Webサイトに関しては、クライアント側のコードは通常、ブラウザがWebページを読み込んだ後にWebブラウザによって実行されるコードです。これは、ホストのWebサーバーで実行されるサーバー側コードとは対照的です。クライアント側のコードは、インタラクティブなWebページで非常に役立ちます。ユーザーのコンピューターは、対話が発生するたびにWebサーバーと通信する必要がないため、対話型コンテンツはより高速かつ確実に実行されます。クライアントベースのコードは、接続の問題に関係なくゲームをスムーズに実行できるため、ブラウザベースのゲームはクライアントサイドのコードの人気のあるプラットフォームの1つです。

クライアント側で実行されるコードは、最新のWeb開発で非常に人気があり、ほとんどの最新のWebサイトで使用されています。クロスサイトコードは現代のWebの主要要素であるため、クロスサイトスクリプティングは最も頻繁に報告されるサイバーセキュリティの脆弱性の1つになり、クロスサイトスクリプティング攻撃はYouTube、Facebook、Twitterなどの主要なサイトを攻撃しました。

クロスサイトスクリプティングの例とは?

クロスサイトスクリプティング攻撃の有用な例の1つは、一般的に、未検証のコメントフォーラムがあるWebサイトで見られます。この場合、攻撃者は「<script></script>」タグでラップされた実行可能コードで構成されるコメントを投稿します。これらのタグは、タグ間のすべてをJavaScriptコードとして解釈するようにWebブラウザに指示します。そのコメントがページに表示されると、他のユーザーがそのWebサイトを読み込むと、スクリプトタグ間の悪意のあるコードがWebブラウザによって実行され、彼らは攻撃の被害者になります。

攻撃者はどのようにしてクロスサイトスクリプティングを使用して害を及ぼすことができますか?

JavaScriptは、個人情報の盗難やその他の悪意のある目的に使用できる機密データにアクセスできるため、JavaScriptのクロスサイトスクリプティング攻撃が一般的です。たとえば、JavaScriptはCookie *にアクセスでき、攻撃者はXSS攻撃を使用してユーザーのCookieを盗み、オンラインで偽装する可能性があります。JavaScriptは、HTTPリクエストを作成することもできます。HTTPリクエストを使用して、データ(盗まれたCookieなど)を攻撃者に送り返すことができます。さらに、クライアント側のJavaScriptは、位置情報座標、Webカメラデータ、およびその他の機密情報を含むAPIに攻撃者がアクセスするのを助けることもできます。

一般的なクロスサイトスクリプティング攻撃の流れは次です:

  1. 被害者はWebページを読み込み、悪意のあるコードがユーザーのCookieをコピーします
  2. 次に、コードはHTTPリクエストを攻撃者のWebサーバーに送信し、リクエストの本文に盗まれたCookieを含めます。
  3. その後、攻撃者はこれらのCookieを使用して、ソーシャルエンジニアリング攻撃の目的でそのWebサイトのユーザーになりすますことができ、銀行口座番号やその他の機密データにアクセスすることさえできます。

* Cookieは、ユーザーのコンピューターに保存される一時的なログイン認証情報です。たとえば、ユーザーがFacebookなどのサイトにログオンすると、サイトはユーザーにCookieを提供するため、ブラウザーウィンドウを閉じてその日遅くにFacebookに戻った場合、Cookieによって自動的に認証され、再度ログインする必要はありません。

クロスサイトスクリプティングにはどのようなタイプがありますか?

クロスサイトスクリプティング攻撃の2つの最も一般的なタイプは、反射型クロスサイトスクリプティングと蓄積型クロスサイトスクリプティングです。

反射型クロスサイトスクリプティング

これは最もよく見られるクロスサイトスクリプティング攻撃です。反射攻撃により、悪意のあるコードがWebサイトのURLの末尾に追加されます。多くの場合、これは正当で信頼できるWebサイトになります。被害者がWebブラウザにこのリンクを読み込むと、ブラウザはURLに挿入されたコードを実行します。攻撃者は通常、何らかの形のソーシャルエンジニアリングを使用して、被害者をだましてリンクをクリックさせます。

たとえば、ユーザーは自分の銀行から来たと主張する正当なメールを受信する場合があります。電子メールは、銀行のWebサイトで何らかのアクションを実行し、リンクを提供するように依頼します。リンクは次のようなものです:

http://legitamite-bank.com/index.php?user=<script>ここに悪いコード挿入!</script>

URLの最初の部分は安全に見え、信頼できるWebサイトのドメインが含まれていますが、URLの最後に挿入されたコードは悪意のあるものである可能性があります。

蓄積型クロスサイトスクリプティング

これは、コメントフォーラムやソーシャルメディアサイトなど、他のユーザーに表示されるコンテンツをユーザーが投稿できるサイトで発生します。サイトがユーザー生成コンテンツの入力を適切に検証しない場合、攻撃者はページが読み込まれたときに他のユーザーのブラウザが実行するコードを挿入できます。たとえば、攻撃者がオンラインデートサイトにアクセスすると、プロフィールに次のようなものが表示される場合があります:

 「こんにちは!僕の名前はデイブです。趣味はビーチでの長い散歩と<script>ここに悪意のあるコード</script>」

デイブのプロフィールにアクセスしようとするユーザーは、デイブの蓄積型クロスサイトスクリプティング攻撃の被害者になります。

クロスサイトスクリプティングを防止する方法

Cross-site scriptingを軽減するための単一の戦略はなく、さまざまなタイプのWebアプリケーションがさまざまなレベルの保護を必要とします。いくつかの保護対策を講じることができますが、以下にいくつかの概要を示します。

可能であれば、入力でのHTMLを回避 - 蓄積型クロスサイトスクリプティング攻撃を回避する非常に効果的な方法の1つは、ユーザーがフォーム入力にHTMLを投稿できないようにすることです。ユーザーがHTMLを使用せずにリッチコンテンツを作成できる他のオプション(マークダウンエディターやWYSIWYGエディターなど)があります。

入力の検証 - 検証とは、特定の基準を満たさないフォームにユーザーがデータを投稿できないようにするルールを実装することを意味します。たとえば、ユーザーの「姓」をリクエストする入力には、ユーザーが英数字で構成されるデータのみを送信できるようにする検証ルールが必要です。検証ルールは、「<script>」タグなど、クロスサイトスクリプティングで一般的に使用されるタグまたは文字を拒否するように設定することもできます。

データのサニタイズ - データのサニタイズは検証に似ていますが、データがすでにWebサーバーに投稿された後、まだ別のユーザーに表示される前に発生します。HTMLをサニタイズし、悪意のあるコード挿入を除外できるオンラインツールがいくつかあります。

Cookieのセキュリティ対策を実行 - Webアプリケーションは、クロスサイトスクリプティング攻撃を介してCookieの盗難を軽減できる特別なルールをCookie処理に設定することもできます。Cookieは特定のIPアドレスに結び付けられるため、クロスサイトスクリプティング攻撃者はそれらにアクセスできません。さらに、JavaScriptが完全にCookieにアクセスするのをブロックするルールを作成できます。

WAFルールの設定 - WAFは、反射型クロスサイトスクリプティングを防止するルールを実施するように構成することもできます。これらのWAFルールは、クロスサイトスクリプティング攻撃など、サーバーへの奇妙なリクエストをブロックする戦略を採用しています。Cloudflare WAFは、ターンキーインストールを提供し、クロスサイトスクリプティング、DDoS攻撃SQLインジェクション、およびその他の一般的な脅威からWebアプリケーションを保護します。