2009-07-24 Webセキュリティ vol.2 〜XSS〜 XSSとは? XSSが生まれる理由 XSSを防ぐ方法 symfonyなら安心 XSSってどれぐらい危険? XSSとは? クロスサイトスクリプティング サイト間を横断して悪意のあるスクリプトを混入させること これに加え、任意の要素を混入させられるうる脆弱性を含む →ターゲットは違う人のPC・ブラウザになる。 XSSが生まれる理由 バグのせい 外部から来た値に対するチェック漏れ 入力した値のエスケープ忘れ。 XSSを防ぐ方法 基本はhtmlspecialchars()関数 < > & " 第二引数のENT_QUOTES必須 'も変換してくれる どんな値に注意するか $_GET、$_POST $_SERVER['PHP_SELF'] DBから取得した値 外部サイトのRSSから取得した値 アップロード画像から取得した値 リクエストヘッダのMime-type コメント領域 EXIF情報 symfonyなら安心 settings.ymlのescaping_strategyをbothに スーパーグローバル変数の利用は厳禁 XSSってどれぐらい危険? 非常に危険 HTML中にJSが書ける=自由度が高い HTML要素やCSSを書けるだけでも恐怖 JSでできること 起動タイミングは任意 同一ホストへのGET/POSTが可能 他ホストへのGET/POSTが可能 HTMLの見た目・挙動を変更できる XMLHttpRequest 同一ホスト内で可能なことはほとんど何でも可能 何回でも実行可能 →様々なことが実行可能