Webセキュリティ vol.2 〜XSS〜

  • XSSとは?
  • XSSが生まれる理由
  • XSSを防ぐ方法
  • symfonyなら安心
  • XSSってどれぐらい危険?

XSSとは?

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

  • サイト間を横断して悪意のあるスクリプトを混入させること
  • これに加え、任意の要素を混入させられるうる脆弱性を含む

→ターゲットは違う人のPC・ブラウザになる。

XSSが生まれる理由

バグのせい

  1. 外部から来た値に対するチェック漏れ
  2. 入力した値のエスケープ忘れ。

XSSを防ぐ方法

  • 基本はhtmlspecialchars()関数
    • < > & "
    • 第二引数のENT_QUOTES必須
      • 'も変換してくれる
どんな値に注意するか
  • $_GET、$_POST
  • $_SERVER['PHP_SELF']
  • DBから取得した値
  • 外部サイトのRSSから取得した値
  • アップロード画像から取得した値
    • リクエストヘッダのMime-type
    • コメント領域
    • EXIF情報

symfonyなら安心

XSSってどれぐらい危険?

  • 非常に危険
    • HTML中にJSが書ける=自由度が高い
    • HTML要素やCSSを書けるだけでも恐怖
JSでできること
  • 起動タイミングは任意
  • 同一ホストへのGET/POSTが可能
  • 他ホストへのGET/POSTが可能
  • HTMLの見た目・挙動を変更できる
XMLHttpRequest
    • 同一ホスト内で可能なことはほとんど何でも可能
    • 何回でも実行可能

→様々なことが実行可能