注入产生的原理:程序员
数据库设置为GBK编码:数据库
宽字节注入源于程序员设置MySQL链接时错误配置为:set character_set_client=gbk,这样配置会引起编码转换从而致使的注入漏洞.函数
一、正常状况下,当GPC开启或者使用addslashes函数会过滤GET或POST提交的参数时,黑客使用的单引号(')会被转义成:\';编码
二、但若是存在宽字节注入,咱们输入%df%27时,首先通过上面提到的单引号转义变成了%df%5c%27(%5c是反斜杠),以后在数据库查询utf-8
前因为使用了GBK多字节编码,即在汉字编码范围内两个字节会编码为一个汉字.从而形成注入漏洞.it
服务端代码设置为UTF-8编码:原理
utf-8转GBKcli
这里思考下“锦”这个字,它的utf-8编码是e98ca6,它的gbk编码是%e5%5c,而上面提到过反斜杠\正好为%5c.因此若是咱们将title设置配置
为:'錦',首先通过addlashes函数或GPC对单引号转义变为:錦\', 而后会通过iconv函数会对"錦"转化为gbk编码,最后就是%e5%5c%5c%27.程序
反斜杠被转义了(%5c%5c),从而单引号逃逸出来就会引起注入漏洞。