XSS対策しよう(6-46)
大枠
・XSS(クロスサイトスクリプティング)攻撃のセキュリティリスクがある
・phpではhtmlspecialcharsを使ってエスケープする
XSS(クロスサイトスクリプティング)攻撃のセキュリティリスクがある
*XSS:ユーザーの入力データを表示する箇所のHTML生成の実装に不備があると発生する脆弱性
呟き投稿アプリがあったとして
AさんがCookieを取得するJavaScriptコードを呟く
↓
呟いたJavaScriptコードがBさんの閲覧画面上に表示される
↓
JavaScriptのコードが実行
↓
BさんのCookieがAさんに取得される
↓
BさんのCookie情報でログインされる
↓
その人に成りすまして自由に操作される。個人情報も流出する
ユーザが入力した内容を表示する箇所ではXSS対策は必須
HTMLの文法上特別な意味を持つ特殊記号を文字参照に置き換える(エスケープ)
ex)<→< >→>
何も対策せず表示
ブラウザは[<]タグを開始として認識→コードが実行される
エスケープして表示
ブラウザは[<]を[<]という文字として認識→コードが実行されない!
htmlspecialchars()を使ってHTML特殊記号をエスケープする
・HTMLの特殊記号を文字参照に置き換える
ー$string:変換する文字列
ー$flags:処理の仕方を指定するフラグ
ー$encoding:文字を変換するときに使用するエンコーディング
htmlspecialchars($string,$flags,$encoding)
・ユーザが入力してDBに保存された「<script>…</script>」の値をエスケープするなら
htmlspecialchars('<script>…</script>',ENT_QUOTES,'UTF-8')
#実行結果
<script>…</script>
ENT_QUOTES:特殊文字のうちどれを変換するかという指定
シングル、ダブルクォーテーションの両方を変換対象に含める
基本はこれ使っとけばいい