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

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


クロスサイトスクリプティング/XSSとは、脆弱性のあるWebサイト上で、悪意のあるスクリプトをそのサイトの閲覧者に実行させるネットワーク攻撃のことです。また、その手の攻撃に利用される脆弱性そのものを指す場合もあります。外部のサイトで用意したスクリプトをターゲットのサイトに埋め込み、サイト横断的に閲覧者に被害を与えることからクロスサイトと呼ばれるようになりました。

攻撃者は罠を仕掛けたサイトを作成して脆弱なサイトへのリンク部分に悪意のあるコードを仕掛け、閲覧者がそのリンクをクリックするようにさまざまな手段で仕向けます。閲覧者がそのリンクからサイトを開くと、動的にHTMLやJavaScriptを生成している箇所を悪用してスクリプトが埋め込まれてしまうのです。

埋め込まれたスクリプトは、その閲覧者のWebブラウザで即座に実行される場合や、他の人が閲覧したときに実行される場合もあります。実行されると、Cookieデータを攻撃者に奪取または改ざんされて、本人になりすましてアクセスされるほか、本来と異なる偽画面を表示されて、入力した個人情報を攻撃者に送ってしまうこともあります。

その他にも、攻撃者の指定した内容を自分のSNSに書き込んでしまったり、設定を勝手に変更される、不正な広告が表示されるなど、さまざまなトラブルが発生することが懸念されます。サイト運営者がいつの間にか加害者になってしまうこともあります。

クロスサイトスクリプティング/XSSの対策法とは


クロスサイトスクリプティング/XSSを防ぐためには、ユーザーの入力から悪意あるコードをブロックする手段を取る必要があります。たとえば、HTMLの中に悪意あるコードを入れないためには、「<」、「>」、「"」、「&」などの文字をエスケープしなくてはなりません。エスケープとは特殊文字を別の文字列に置き換える処理のことです。「<」は「&lt;」に、「>」は「&gt;」に、「"」は「&quot;」に、「&」は「&amp;」に変換されます。
このような文字参照に変換することで、特殊文字は単なる文字として扱われ、クロスサイトスクリプティング/XSSの実行を無効化できるでしょう。

HTMLだけでなくJavaScriptに対しても対策は必要です。URLは「http://」、「https://」などから始まるもの以外に「javascript:」で始まるものもありますが、これは指定されないようにしましょう。URLにスクリプトが含まれているとクロスサイトスクリプティング/XSSが可能になる危険性があります。「http://」、「https://」から開始される文字列のみ許可すると良いでしょう。
また、要素の内容を外部からの入力依存にするのもリスクがあるため、動的に生成するのは避けましょう。

クロスサイトスクリプティング/XSSの事例


2010年7月、大手動画共有サイトを狙ったクロスサイトスクリプティング/XSSが発生しました。サイト内で「有名な歌手が交通事故で死亡」などの偽の情報が流れたり、不正なポップアップが出たり、コメントの表示が不可能になるなど、多くのユーザーに影響が出ました。悪趣味なWebサイトにリダイレクトされたりと、問題はさまざまな方向に飛び火しました。
このWebサイトではクロスサイトスクリプティング/XSS対策が脆弱だったため、そこを利用された形でした。攻撃されてから復旧にかかるまでは約2時間程度でしたが、その被害は大きかったようです。攻撃者がCookieを盗むことで、悪意あるJavaScriptコードをユーザーのWebブラウザで実行することが可能になりました。

クロスサイトスクリプティング/XSSの脆弱性が極めて重要な問題を引き起こすことが、周囲に認知された事例といえるでしょう。