いまさらだけどXSS(クロスサイト・スクリプティング)についてまとめる

XSSの概要

攻撃者が悪意のあるスクリプトをwebページに埋め込み、そのスクリプトがユーザのブラウザで実行される脆弱性。
Webサイトには様々な入力項目が存在するが(記事投稿、コメント、ログインなど)、そのうちの1箇所でもXSS脆弱性があるとサイトの利用者がなりすましの被害を受ける可能性がある。

具体的には以下のような影響が考えられる。

  • cookie値を盗まれ、成りすましの被害にあう
  • 偽のフォームが表示され、個人情報を盗まれる

XSSの種類

攻撃用JavaScriptがどこにあるかによって大きく反射型XSS持続型XSSに分類される。

反射型XSS(refrected XSS)

攻撃用JavaScriptが別のサイト(罠サイトなど)にある場合のXSSを反射型XSSと呼ぶ。

以下のようなフローで攻撃が成立する。

  1. 攻撃者が罠サイトを作成
  2. 被害者が罠サイトを閲覧
  3. 攻撃対象サーバに遷移(JavaScriptを含む)
  4. JavaScriptを含むページを生成
  5. 被害者のブラウザ上でJavaScriptが実行

持続型XSS(stored XSS)

攻撃用JavaScriptが攻撃対象のデータベースなどに保存される場合は持続型XSSと呼ぶ。投稿型のWebサイトで攻撃者が悪意のあるスクリプトを投稿し他場合、他の人がサイトを閲覧したり、ページを更新するとスクリプトが実行される。

原因

htmlを生成(ユーザ投稿等)する際に、>"といったhtmlの文法上特別な意味を持つ文字列を、適切にエスケープできていないことからXSSが生じる。

対策

  • 特殊文字へのエスケープ処理を行う

参考