【これだけ】PHPでのエスケープの方法【現役エンジニアが解説】

PROGRAM

今回は、PHPでのエスケープの方法について、PHPの文字列とHTMLのコードの場合に分け、簡単に解説していきます。

PHPの文字列のエスケープの方法

PHPでは、”(ダブルクォート)や'(シングルクォート)を使って文字列を囲みます。

しかし、文字列中にもこれらの記号が登場する場合には正しく認識してもらえません。

$str = "<input type=\"password\" name=\"password\">";

そのような場合には、上記のように、文字列中の該当の記号の直前に円マーク(バックスラッシュ)を付けてエスケープするときちんと認識してもらえるようになります。

HTMLのコードのエスケープの方法

HTMLでは、以下の記号は特殊文字として扱われており、このまま書くと正常に表示することができません。

  • ' (シングルクォート)
  • " (ダブルクォート)
  • & アンパサンド
  • < 小なり
  • > 大なり

そこで、PHPのhtmlspecialchars関数を利用することで、これらを正常に表示させるために変換させることができます。

$str = "<注目>"; // 正常表示したい文字列
htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); // 正常に表示できるように変換

htmlspecialchars関数を利用すると、先程の特殊文字は、以下のようにHTMLエンティティというものに変換され、正常表示されます。

  • ' (シングルクォート) ⇒ &#039;
  • " (ダブルクォート) ⇒ &quot;
  • & アンパサンド ⇒ &amp;
  • < 小なり ⇒ &lt;
  • > 大なり ⇒ &gt;

クロスサイトスクリプティング(XSS)の脆弱性対策

例えば、掲示板のようにユーザが書き込んだ内容をそのまま表示するWebサイトの場合、JavaScriptを書き込まれると、サイトを見た方全員に対しプログラムが走る危険性があります。

このような脆弱性のことをクロスサイトスクリプティング(XSS)と呼び、こういったWebサイトを運営する上では、ユーザの情報を保護するためにも、具体的な対策が必須とされています。

この問題への対策は実は難しいものではなく、PHPの場合であれば、DBに保存する前に対象の文字列に先程のhtmlspecialchars関数を使うだけで、JavaScriptの記号が単なるHTMLエンティティに変換されるため、これだけで対策ができてしまいます。