だよねがエンジニアになるんだよね

プログラミング初心者の学びブログ

XSS対策しよう(6-46)

大枠

XSS(クロスサイトスクリプティング)攻撃のセキュリティリスクがある

特殊文字文字参照(エスケープ)に置き換えて対策

phpではhtmlspecialcharsを使ってエスケープする

 

XSS(クロスサイトスクリプティング)攻撃のセキュリティリスクがある

*XSS:ユーザーの入力データを表示する箇所のHTML生成の実装に不備があると発生する脆弱性

呟き投稿アプリがあったとして

AさんがCookieを取得するJavaScriptコードを呟く

呟いたJavaScriptコードがBさんの閲覧画面上に表示される

JavaScriptのコードが実行

BさんのCookieがAさんに取得される

BさんのCookie情報でログインされる

その人に成りすまして自由に操作される。個人情報も流出する

 

ユーザが入力した内容を表示する箇所ではXSS対策は必須

 

 

対策として特殊文字エスケープしよう

HTMLの文法上特別な意味を持つ特殊記号を文字参照に置き換える(エスケープ)

ex)<→&lt;   >→&gt;

 

何も対策せず表示

ブラウザは[<]タグを開始として認識→コードが実行される

エスケープして表示

ブラウザは[<]を[<]という文字として認識→コードが実行されない!

 

 

PHPXSS対策するには?

htmlspecialchars()を使ってHTML特殊記号をエスケープする

・HTMLの特殊記号を文字参照に置き換える

 ー$string:変換する文字列

 ー$flags:処理の仕方を指定するフラグ

 ー$encoding:文字を変換するときに使用するエンコーディング

htmlspecialchars($string,$flags,$encoding)

 

・ユーザが入力してDBに保存された「<script>…</script>」の値をエスケープするなら

htmlspecialchars('<script>…</script>',ENT_QUOTES,'UTF-8')

 

#実行結果

&lt;script&gt;…&lt;/script&gt;

 

ENT_QUOTES:特殊文字のうちどれを変換するかという指定

       シングル、ダブルクォーテーションの両方を変換対象に含める

       基本はこれ使っとけばいい