宽字节概念:
-
当某字符的大小为一个字节时,称其字符为窄字节。
-
当某字符的大小为两个字节时,称其字符为宽字节。
-
所有英文默认占一个字节,汉字占两个字节。
- 常见的宽字节编码:GB2312,GBK,GB18030,BIG5,Shift_JIS等。
产生原因:
如果数据库使用的的是GBK编码而PHP编码为UTF8就可能出现注入问题,原因是程序员为了防止SQL注入,就会调用我们上面所介绍的几种函数,将单引号或双引号进行转义操作,转义无非便是在单或双引号前加上斜杠(\)进行转义 ,但这样并非安全,因为数据库使用的是宽字节编码,两个连在一起的字符会被当做是一个汉字,而在PHP使用的UTF8编码则认为是两个独立的字符,如果我们在单或双引号前添加一个字符,使其和斜杠(\)组合被当作一个汉字,从而保留单或双引号,使其发挥应用的作用。但添加的字符的Ascii要大于128,两个字符才能组合成汉字 ,因为前一个ascii码要大于128,才到汉字的范围 ,这一点需要注意。
ascii大于128的可以通过摁住alt然后加数字打出,如alt+129=
引用文章:(22条消息) 宽字节注入详解_Stray.io的博客-CSDN博客_宽字节注入
标签:字符,字节,编码,双引号,汉字,注入 From: https://www.cnblogs.com/ruyan/p/16790537.html