htmlspecialcharsの使い方と第2引数について

php&MySQL

PHPの基本的なセキュリティ対策としてhtmlspecialchars()というメソッドでタグなどをエスケープして無効化できます。

例えば、'&' (アンパサンド) は '&amp;' 、 '<' (小なり) は '&lt;' などです。

なぜこうすると安全なのでしょうか?
HTMLでは特殊文字は正しく表示できません。例えば&を正しく表示使用とすると'&amp;'とする必要があります。こうすることにより&は表示されますが、本来の&としての意味は失われます。悪意のあるスクリプトを書き込もうとする場合は何らかの特殊文字が必要になりますが、htmlspecialchars()を使うことで表面上はその記号を表示させても、本来の意味がなくなりますのでスクリプトとして成り立たなくなるのです。

この際、一般的には第2引数をENT_QUOTESとする場合が多いのですが、これはENT_QUOTESを使用することでシングルクオートとダブルクオートを共に変換することになります。

HTMLの属性値は、ダブルクオートかシングルクオートで括る必要があります。一般的にはほとんどダブルクオートで括られていますが、実はジングルクオートも可能であり、全く省略することもありです。(XHTMLは不可)

そのためにシングルクオートで括られた属性値を無効化する必要性が出てくる訳です。
htmlspecialcharsの第2引数を省略した場合は、ENT_COMPAT | ENT_HTML401となりダブルクオートは変換しますがシングルクオートは変換しませんので注意が必要です。

string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )
タイトルとURLをコピーしました