gbk编码原理
一个字符占1个字节
两个字节以上叫宽字节
设置“set character_set_client=gbk”(gbk编码设置),通常导致编码转换的注入问题,尤其是使用php连接mysql数据库的时候
一个gbk汉字占两个字节,取值范围是(编码位数):第一个字节是(129-254),第二个字节(64-254)
当设置gbk编码后,遇到连续两个字节,都符合gbk取值范围,会自动解析为一个汉字
gbk 两个字节 gb2312两个字节 utg-8 三个字节
‘号转义
addslashes函数防止sql注入,将传入参数值进行转义。将' 转义为\‘,单引号失去作用
加’不报错,说明不存在注入
如何绕过:
输入%df%27,本来\ 会转义%27(‘),但\(%5c)的编码位数为92,%df的编码位数为223,%df%5c符合gbk取值范围(第一个字节129-254,第二个字节64-254),会解析为一个汉字,这样\就会是去应有的作用。