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

本来、Cross Site Scriptingの略でCSSと呼称されるべきですが、Cascading Style Sheetsと紛らわしいため、XSSと呼ばれることが多くなっています。この解説でもXSSと略して表記することとします。

XSSは、静的なHTMLページでは発生しません。動的に生成される場合にのみ発生することをまず抑えておきましょう。

最も基本的なXSSの流れは以下の通りです。

攻撃者は予め攻撃対象へのスクリプトを含んだリンクを記載したWebページを用意しておきます。その上で、

1.Aさんが攻撃者の用意したページにアクセスする
2.リンクを含んだ悪意あるページが表示される
3.Aさんがリンクをクリックすると、無意識に攻撃対象のサイトにスクリプトを含んでアクセスし、スクリプトが実行される

このように、攻撃者のサイトから、攻撃対象のサイトに対してサイトをクロスしてスクリプトが実行されるため、「クロスサイトスクリプティング」といいます。

なお、1の手段には事欠きません。メールでURLを送付してしまっても、一般的な掲示板にリンクを張っておいても、同様にスクリプトが実行されてしまいます。

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

この手法で脅威となるのは、Aさんからすると、攻撃対象のサイトから送られてきたスクリプトがブラウザ上で実行されることです。

通常、cookieは他サイトで発行されているものにはアクセスできませんが、XSSを利用すれば、攻撃対象のサイトから送られてきているため、cookieを送付するようなスクリプトも受け付けてしまいます。

cookieが漏えいするとセッション番号を盗まれて、セッションハイジャックのような手法でなりすましを受けてしまう危険性が生じます。

また、それだけには留まらず、攻撃対象のサイトから送られてきたスクリプトがブラウザ上で実行されることで、本物のサイト上に偽サイトを表示させることでフィッシング詐欺に繋がったりする恐れもあります。

これがXSSの代表的な被害の形態ですが、実際にはjavascriptで実現できることは全て可能になると考えてしまってよいでしょう。

まとめると、XSSとは脆弱性のあるWebサイトに利用者を誘導することによって、利用者の環境で不正なスクリプトを実行させる手段であるといえます。

クロスサイトスクリプティングへの対策

XSSに対しては、非常に広範囲での対策が必要となるため、設計段階から対策に取り組むことが大事です。代表的な対策は、出力する全てのメタ要素に対してエスケープ処理を行うことです。

HTML中に悪意のあるスクリプトを埋め込まれないようにするために、特殊な意味を持つ記号をエスケープ処理させます。

例)以下のような置換処理を行う

& → &
< → lt;
>  → gt;

このように文字に変換してしまうことで、悪意あるスクリプトを無力化することが可能になります。

なお、情報処理技術者の試験においては、従来「サニタイジング」という言葉が上記対応のことを指して呼称していましたが、最近はエスケープという表現に移りつつあるようです。記述問題では意識しておくと良いでしょう。

情報セキュリティスペシャリスト試験対策講座の目次はこちら