脆弱性対策

脆弱性対策(htmlspecialchars)

htmlspecialchars関数は特殊文字を HTML エンティティに変換します。

ユーザーからの入力を返す場合には脆弱性対策として使用しなければなりません。

なお、「ENT_QUOTES」は「シングルクオート」と「ダブルクオート」を共に変換するオプションです。

関数名を短縮してオプションも指定

function h($str) {
	return htmlspecialchars($str, ENT_QUOTES, "UTF-8");
}

サンプル

$str = h($str);

配列ごと変換できるようにする

function h($str) {
	if( is_array($str) ) {
		return array_map("h", $str);
	} else {
		return htmlspecialchars($str, ENT_QUOTES, "UTF-8");
	}
}

サンプル1:文字列

//入力データ
$str2 = "<br>";
print_r(h($str2));
//出力データ
&lt;br&gt;

サンプル2:配列

//入力データ
$str1 = array("one<br>", "<b>two</b>", '"three"', "'four");
print_r(h($str1));
//出力データ
Array
(
   [0] => one&lt;br&gt;
   [1] => &lt;b&gt;two&lt;/b&gt;
   [2] => &quot;three&quot;
   [3] => &#039;four
)

メモ

PHP5.4にて、htmlspecialchars()関数の仕様が変更されました。

第3引数の文字エンコーディングの取り扱い方が変わっています。

文字エンコーディングのオプションを正しく設定していない場合、出力が空になります。

したがって、第3引数の指定が必須となります。

参考