【PHP】HTML文字列のエスケープ
クライアント側に文字列を返すサーバ側の処理を考えた際に、
そのまま返すと文字列にscriptが含まれる場合にscriptが動作してしまうことも考えられます。
そこで、サーバから文字列を返す際には、HTMLを形成する特殊文字をエスケープする必要があります。
PHPにはhtmlspecialcharsというHTMLのエスケープメソッドが用意されています。
htmlspecialchars("文字列", "エスケープの種類", "文字コード");
エスケープの種類は以下の通りで、定数を指定します。
エスケープ種類(定数) | 意味 |
---|---|
ENT_COMPAT | ダブルクォートは置き換えるが、シングルクォートは置き換えない |
ENT_QUOTES | シングルクォートとダブルクォートの両方を置き換える |
ENT_NOQUOTES | シングルクォートとダブルクォートの両方を置き換えない |
入力フォームの値をサーバで取得し別ページに出力するようなプログラムがあったとして、
次のようなスクリプトが入力された場合、htmlspecialcharsを使っている場合とそうでない場合の出力結果は以下の通りです。
・htmlspecialcharsを使った場合 <script type="text\/javascript">alert(document.cookie)<\/script> ・htmlspecialcharsを使っていない場合 <script type=\"text\/javascript\">alert(document.cookie)<\/script>
htmlspecialcharsを使っていない場合、クライアント側で出力した段階でscriptが実行されてしまいます。悪意のあるスクリプトが入力されることを想定すると、出力時にHTMLとして認識させないことが重要です。
WEBサイト中で動的にHTMLやJavascriptを生成している部分に、悪意のあるコードを埋め込む攻撃のことをXSS(クロスサイトスクリプティング)という。