PHP関数 mb_convert_kana() の罠
2009.07.03 Author: Jas
PHPマニュアルによると、mb_convert_kana() のオプションは以下のようになっています。
r | 「全角」英字を「半角」に変換します。 |
R | 「半角」英字を「全角」に変換します。 |
n | 「全角」数字を「半角」に変換します。 |
N | 「全角」英数字を「半角」に変換します。 |
a | 「全角」英数字を「半角」に変換します。 |
A | 「半角」英数字を「全角」に変換します ("a", "A" オプションに含まれる文字は、U+0022, U+0027, U+005C, U+007Eを除く U+0021 - U+007E の範囲です)。 |
一見、オプションの'rn' = 'a'、'RN' = 'A'のように見えますが、実はそうではありません。
ポイントは'A'オプションの説明にカッコ書きで書かれている部分です。
("a", "A" オプションに含まれる文字は、U+0022, U+0027, U+005C, U+007Eを除く U+0021 - U+007E の範囲です)
'a'オプションと'A'オプションの変換対象になるのは、「英数字」だけではないのです。
U+0021 - U+007Eの範囲には、'!'や'#'、'&'などのASCII文字が含まれています。
そして、対象外となるのは以下の四つのみということです。
U+0022: " (ダブルクォート)
U+0027: ' (シングルクォート)
U+005C: / (バックスラッシュ)
U+007E: ~ (チルダ)
ここで、大問題になるのが変換対象の範囲に'<'や'>'、'&'が含まれていることです。
mb_convert_kana() を使用したことにより、意図しないタグが生成され、セキュリティホールにならないように細心の注意が必要です。
名古屋のWebシステム開発・ネットワーク構築会社 コネクティボへ