GBK字符编码(字符集)缺陷导致网络安全漏洞
多字节编码的起源。我们先来看看最常用的一个。最小字符集为ascii,对应的二级系统可以表示为00-7F编码。它也是我们计算机最早使用的通用字符集。几乎所有的英文字符都可以在早期表现出来。后来,更多使用电脑的国家加入后,我们想用电脑代表汉字。我们知道普通汉语有7000多个字。Ascii码只有128个字符,编码位置只有0-127个,远远不够。因此,我们开始制作更大的字符集,并确保与ascii编码兼容。要支持更多字符,请选择更大的字符集。我们只能用多个字节来描述一个字符。为了区别于ascii码!通常的做法是每个字节值都大于7F。如果是2字节,就是[7F][7F]。这样就可以和ascii区分开来,扩大字符集。和gb2312一样,范围是[0xA1-0xF7][0xA1-0xFE](中间很多没有填满),完全保证所有字节都在A0以上,7F以上完全满足。GBK编码漏洞的原因通过以上分析,我们知道gb2312编码与ascii码是很好分离的。让我们看看,gbk编码与gb2312完全兼容(也就是说,每个字符在gb2312字符集内的位置与在GBK字符集内的位置完全一致,包含在gb2312中),但它有20,000多个字符。从上面看,我们只能选择往下排序。它只是从A1A0往下走,我们发现它的实际编码范围是[0x 81-0xfe]([0x40-0x7E |0x 80-0xfe])(GBK编码),我们发现它由2个字节组成,第一个字节在7F以上,而第二个字节部分在0x 40-0x7E。这就是导致那个错误的原因。让我们来看看下面的例子!
从ASCII码表中,我们知道0x40-0x7E包含以下字符:“。
选择gbk代码,运行上面的代码,一个简单的命令就会引起错误,说字符串赋值没有完成!呵呵,估计很多人看到这个都会觉得php有Bug。然而,如果我们变成$a=“真诚的a”,我们发现它可以正常运行。你不觉得很棒吗!原因分析:我们知道磁盘上文件的存在是一个两级系统,无论你存储什么字符,最后都会保存在所选字符集的字符代码中。解析php时,最小的解析单位是字节。无论你是多字节还是单字节字符。最后都是按字节处理的。“程”的GBK代码是D55C,用php中的字节解释,5C对应的字符是“\”。后面直接跟一个'',相当于被转义。发生错误,因为它没有关闭!你可以看到问题所在。如果自己处理,自然会把多个字节拆分成单个字节。会有很多奇怪的问题。总结:通过上面的解释,我们知道了多字节编码的过程,以及GBK在简单程序中造成错误的原因。事实上,在我们的许多编程语言中,它们是由单个字节解析的。这样,当你选择多字节GBK编码的中文时,只是一个字节落在一个特殊的位置,这将导致奇怪的错误。而且,也会给制度带来自己的漏洞。后面我会再说一遍,GBK编码缺陷导致的漏洞,以及专门利用编码漏洞进行系统入侵!好了,我们到了。欢迎交流!
GBK字符编码(字符集)缺陷攻击(注入)原理。
在最后一节,我们分析了。选择不同的代码可能会导致程序自带潜在的漏洞。这一次,我们以GBK编码为例,看看它是如何被注入系统的。目前很多开源系统都有类似的注入问题。让我们从一个演示开始!
GBK字符集漏洞注入原理。
版权声明:GBK字符编码(字符集)缺陷导致网络安全漏洞是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。