
クロスサイトスクリプティング(XSS)は、コードの脆弱性の一種であり、ユーザーの同意や自覚なしにブラウザ内でコードを実行することができます。 XSSは一般的にJavaScriptで実行されますが、Flash、Javaなどの類似のWebプログラミングが使用されることもあります。
XSSはブラウザ内において、セッション(クッキー)を使用して、あなたの代わりにサイトとのやり取りを可能にするコード利用することで、攻撃者があなたと同じ権限でのアクセスを可能とします。
悪意のあるXSSコードを実行しているページにアクセスすると、新しいコンテンツの投稿、他のユーザーへの友達申請、投票、サイトの管理設定の変更など、サイト内であなたが行う事ができる、あらゆる操作を第三者が行うことができる状態となります。
なぜ「クロスサイトスクリプティング」と呼ばれているのか?
クロスサイトスクリプティングの歴史に関する記事の中で、Jeremiah GrossmanはXSSについて以下のように説明しています。
悪意のあるWebサイトは隣接するフレームやウィンドウに別のWebサイトを読み込み、そこにJavaScriptを読み込ませます。これにより、あるサイトがサイトの境界を越えて別のページにスクリプトを書き込んだり、フォームからデータを取り出したり、ページを書き直したりすることができるようになります。そのため、クロスサイトスクリプティングという名前が付けられました。
当時は、XSSはあるサイトの悪意のあるコードが別のサイトに影響を及ぼすということを意味していました。しかし、最近ではこれだけではなく、ブラウザがデータとしてではなく、実行可能なコードとして認識してしまうような形式のコード(Javascriptだけとは限らない)の挿入という、全般的なHTMLコードインジェクションを意味します。
クロスサイトスクリプティングはどのよう実行されるのですか?
このビデオでは、悪意のある訪問者がXSSを使用してユーザーのパスワードを変更できるという、不適切なサイトの例を示しています 。次に、Security Reviewモジュールを使用して、サイト内のXSSの脆弱性を特定し、修正する方法を示します。Security Reviewモジュールは完全な解決策ではありません。一般的な脆弱性を発見するだけです。
クロスサイトスクリプティングを特定するにはどうすればよいですか?
次に、クロスサイトスクリプティングの脆弱性を特定するいくつかの方法を見てみましょう。 基本的な問題としては、ブラウザ内でコードを実行できることです。 セキュリティレビューではJavaScriptの脆弱性がよく見受けられますが、他の攻撃手段も無視すべきではありません。
これまでの経験から、3つの方法を利用するとセキュリティーレビューを効率化する事ができます。
- JavaScriptのalert() メソッドで表示されるボックスなど、見逃しにくいポップアップするものを使用してください。
- インジェクションが行われた場所に固有の警告の内容を作り、そららを辿る事ができるようにします。
- フィールドにより、フィルタリングする情報のタイプが異なる可能性もあるので、複数のメソッドを試してみましょう。
具体的には、これらの2つの文字列をインジェクションしようとします。
"><script>alert('blog-node-title');</script>
"><img src="u.png" onerror="alert('blog-node-title');"</script>
"> で始まる文字列を入力することで、その文字列がHTML属性の中に展開される場合にインジェクションを発生させることができます。これらの文字列を投稿してサイトを閲覧すると、JavaScriptのポップアップボックスが表示されることがあります。
アラート内のメッセージ(前の例のblog-node-titleなど)を調べて、それがインジェクションしたコードのaltertで指定した文字列に由来することを確認してください。その後、ページのHTMLを調べて、JavaScriptが漏れている箇所を見つけ、コードをトレースして適切なフィルタ関数を追加することができます。
終わりに
XSSはDrupalに限らずWebシステムやWebサイト全般で脅威になる問題です。
Drupalの場合、Form API や Input Filter を適切に利用すれば何も問題ありませんが、これらを使わずに直接フォームを制御したりJavascriptを埋め込んだりすると脆弱性に繋がる可能性があります。
独自にカスタマイズした機能を作成する場合は、filter_xss や check_plain などのAPIを利用して適切にエスケープを行ってください。
サニタイズ用に用意されているAPIは Sanitiation functions で確認することができます。
おすすめ記事
関連コンテンツ
- Drupal 10とは?長所・短所とDrupal 11の進化ポイントを徹底解説!
- DrupalとWordPressの違い─どちらのCMSを採用すべきか
- Drupal CMS 1.0がリリースされました
- Drupalテーマ開発における革新的な機能: Single Directory Components (SDC)
- DrupalにおけるAI:驚くべき機能の最新デモが示す未来
- Drupal CMSの今後の展望
- DDEVを用いてDrupal CMS(Drupal Starshot)をインストールする
- Dries Buytaert氏の基調講演が明らかにしたDrupalの未来
- 大規模サイトのCMS選定基準 - インフラコストと運用負荷の最適化ガイド
- DrupalベースのEC構築事例 - インフラコストを抑えた大規模サイト運用
Drupal 初心者講座バックナンバー
-
Drupal 9/10 初心者講座
-
第 1 回 歴史に見る Drupal の DNA
-
第 2 回 Drupal はフレームワークか?CMS か?他の CMS との比較
-
第 3 回 Drupal の特徴
-
第 4 回 Drupal 9 / 10 のインストール (1)
-
第 5 回 Drupal 9 / 10 のインストール (2)
-
第 6 回 Drupal にコンテンツを投稿してみる
-
第 7 回 Drupal のボキャブラリとタクソノミーの使い方
-
第 8 回 コンテンツ管理における Drupal と他の CMS との比較
-
第 9 回 Drupal のブロックシステム
-
第 10 回 Drupal の標準クエリビルダー Views の使い方
-
第 11 回 Drupal と他の CMS のクエリビルダー機能を比較
-
第 12 回 Drupal の多言語機能と他の CMS やサービスとの比較
-
第 13 回 Drupal の権限設定と WordPress や Movable Type との比較
-
第 14 回 Drupal のテーマシステムについて
-
第 15 回 Drupal の拡張モジュールの選定と使い方
-
第 16 回 Drupal をもっと知りたい方に向けた各種情報