mysql使用set names gbk形式来规定字符集的危害

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

原因:php语言针对字符串是以字节的形式来处理的,如“誠”gbk编码则表示为0xdc0x5c,而0x5c则表示‘\’,故输入“誠”(或直接输入0xdc0x5c,下同含义)时,即输入了0xdc0x5c——0xdc\,依照魔术引号过滤后为“誠\”,若输入“誠'”,则会处理为“誠\\'”,结果为多了个单引号,另mysql中/*  */表示块级注释,#可注释单行。

综上,可知,若以set names gbk或其它多字节编码形式规定字符集则存在明显的sql注入漏洞。(单字节站点则无惧该风险)

解决方法:自定义字符集,如set character_set_connection=gbk,character_set_results=gbk,set character_set_client=binary;设置gbk格式的连接字符集和返回结果字符集,二进制的客户端发送字符集。

转载于:https://my.oschina.net/u/3171768/blog/1010604

你可能感兴趣的:(mysql使用set names gbk形式来规定字符集的危害)