缘由:php语言针对字符串是以字节的形式来处理的,如“誠”gbk编码则表示为0xdc0x5c,而0x5c则表示‘\’,故输入“誠”(或直接输入0xdc0x5c,下同含义)时,即输入了0xdc0x5c——0xdc\,依照魔术引号过滤后为“誠\”,若输入“誠'”,则会处理为“誠\\'”,结果为多了个单引号,另mysql中/* */表示块级注释,#可注释单行。php
综上,可知,若以set names gbk或其它多字节编码形式规定字符集则存在明显的sql注入漏洞。(单字节站点则无惧该风险)mysql
解决方法:自定义字符集,如set character_set_connection=gbk,character_set_results=gbk,set character_set_client=binary;设置gbk格式的链接字符集和返回结果字符集,二进制的客户端发送字符集。sql