0x00什么是宽字节?
即用两个字节储存一个字符
比如GB2312,GBK,GB18030,BIG5,Shift_JIS
高8位>128
0x01宽字节注入原理
image.png0x02程序上的体现(白盒)
1.mysql编码为双字节编码
mysql_query("SET NAMES gbk");
2.使用preg_replace进行转义
$string = preg_replace('/'. preg_quote('\\') .'/', "\\\\\\", $string);
$string = preg_replace('/\'/i', '\\\'', $string);
$string = preg_replace('/\"/', "\\\"", $string);
3.使用addslashes进行转义
$string= addslashes($string);
4.使用mysql_real_escape_string进行转义
$string= mysql_real_escape_string($string);
0x03防御宽字节注入
1.使用utf-8
2.mysql_real_escape_string,mysql_set_charset('gbk',$conn)
3.设置参数,character_set_client=binary
网友评论