宽字节注入及其防御

0x00什么是宽字节?

即用两个字节储存一个字符
比如GB2312,GBK,GB18030,BIG5,Shift_JIS
高8位>128

0x01宽字节注入原理

image.png

0x02程序上的体现(白盒)

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

你可能感兴趣的:(宽字节注入及其防御)