Pages

2011年2月21日月曜日

マルチバイトアタック対策について

Zend_DbのQuoteについて現状を再調査した時にちょっと調べ物をしたので下にメモ。

相変わらずLIKE向けにのQuote関数は増えてないようやね。。
LIKEなんか使う位なら全文検索サーバー入れろって事なんでしょうか。。

とりあえず今回はこの事じゃなくてマルチバイトアタックにいて小実験してたので、メモ。
崩し文字(?)対策はどうもZend\Db_quoteされてないような気がする。。

って何か出力結果が違うぞ。。
てか「'」が取れない。。このままじゃLIKEに使えない。。
なんだこれ。。 仕方がない。。

MySQLでLIKE使う時はaddcslashesしかないのかな。。

 NULL + SUB(Control Z) + "OK"
// マルチバイトアタック対策無し

$str = pack("nvc*", 0x00, 0x1A, 0x6F, 0x6B, 0x83, 0x1A);
var_dump($str);
$res = addcslashes($str, "\\\000\n\r'\"\032%_");
var_dump($res);

echo "\n-----------------------------------\n";

// SJIS -> "O"の崩し + "K"
// マルチバイトアタック対策有り

$str = pack("nvc*", 0x1A, 0x6B, 0x83, 0x1A);
var_dump($str);
$str = mb_convert_encoding($str, 'SJIS-win', 'SJIS-win');
$res = addcslashes($str, "\\\000\n\r'\"\032%_");
var_dump($res);

echo "\n-----------------------------------\n";

// UTF8 -> "ア" + NULL + NULL + NULL
// マルチバイトアタック対策無し

$str = pack("nvc*", 0xE3, 0x82, 0xA2, 0x00, 0x00, 0x00);
var_dump($str);
$res = addcslashes($str, "\\\000\n\r'\"\032%_");
var_dump($res);

echo "\n-----------------------------------\n";

// UTF8 -> "ア" + NULL + NULL + NULL
// マルチバイトアタック対策有り

$str = pack("nvc*", 0xE3, 0x82, 0xA2, 0x00, 0x00, 0x00);
var_dump($str);
$str = mb_convert_encoding($str, 'UTF8', 'UTF8');
$res = addcslashes($str, "\\\000\n\r'\"\032%_");
var_dump($res);

echo "\n-----------------------------------\n";

// UTF8 -> "ア"の崩し
// マルチバイトアタック対策無し

$str = pack("nvc*", 0xE3, 0xA1, 0xA2);
var_dump($str);
$res = addcslashes($str, "\\\000\n\r'\"\032%_");
var_dump($res);

echo "\n-----------------------------------\n";

// UTF8 -> "ア"の崩し
// Zend_Db_quoteを利用

$str = pack("nvc*", 0xE3, 0xA1, 0xA2);
var_dump($str);
$res = $db->quote($str);
var_dump($res);

0 件のコメント:

コメントを投稿

Followers