当心字符集导致浏览器软件跨站脚本进犯脚本之家mingxing - 凯时娱乐

当心字符集导致浏览器软件跨站脚本进犯脚本之家mingxing

2018-10-07 09:46:09 | 作者: 昂熙 | 标签: 字符,字符集,浏览器 | 浏览: 6055

在一般的web程序里,显现数据给浏览器的时分都会指定一个字符集,在国内平常咱们用到的字符集有utf-8,GBK,gb2312等等,字符集指示了浏览器该怎么对待回来的数据。其间gb2312和GBK字符集运用得十分广泛,可是经证明,IE在处理这些宽字符集的时分存在问题,导致或许程序的一些安全规矩被Bypass掉,引发严峻的跨站脚本安全缝隙。在IE里,假如它遇到一个字符,它是指定字符集里的第一位的时分,就会以为其后续字符和当时字符构成一个合法的字符,这样它在解析包含html标签,处理javascript,Css时都会做如此考虑,测验版别为ie6和ie7。

1 Bypass某些js的查看规矩


HTML]
[HEAD]
[TITLE]80sec test[/TITLE]
[meta http-equiv="Content-Type" content="text/html; charset=gb2312" /]
[/HEAD]
[BODY]
[script]
window.onerror=function(){
alert('Vul');
return true;
}
[/script]
[script]x='[?php echo chr(0xC1);?]';y='[User_IN_PUT]‘;[/script]
[/BODY]
[/HTML]


这儿即便是过滤了〈>’\等字符相同能够运用不合法字符集序列来完成\的效果,因为它会把本来存在的’给结合掉,然后前面的’找不到闭合,后边[User_IN_PUT]就能够用来履行js代码了。

2 Bypass某些特点的查看规矩

为了防止直接运用html导致呈现缝隙,一些论坛和程序运用了UBB标签,可是在gbk等多字节编码下,相同简单呈现问题,以最简单呈现问题的一个UBB标签为比如:


color=xyz[?php echo chr(0xC1);?]][/color][color=abc onmouseover=alert
(/xss/) s=[?php echo chr(0xC1);?]]exploited[/color]

0xC1是一个gb2312的第一个字节,上面成果将会转化为:

font color="xyz?][/font][font color="abc onmouseover=alert(/xss/) s=?]
exploited[/font]
其间的
alert(/xss/)

将会做一个事情履行,所以即便UBB标签也变得不安全,能饶过”的维护。许多论坛都没有留意这点,phpwind,动网等论坛就简单遭到这种进犯。而Discuz经过在转化成果之后附加一个空格,修补了这一安全问题。这儿运用到ubb标签其实有一个很有意思的tips在里面,因为有的数据库会扔掉与指定字符集不匹配的字符,所以有必要凭借后边的]等字符来构成一个有用的汉字才干存储到数据库里,当然像ACCESS这种就不会有问题了,别的一些言语在处理字符串的时分会强制字符串的字符集类型,不合法的字符会导致转码的失利或许遭到扔掉,所以也不能运用这种类型的进犯。

3 几个小比如

Phpwind论坛charset跨站脚本缝隙


[email=xxxx羃[/email][email=xxxx onmouseover=alert() s=羃]Fuck Me[/email]
[font=宋体;0xc1]xxx[/font]xx


羃是一个特别的十六进制编码和后边的]结合出来的字符,第一个种方法能够直接仿制的:)

0xc1表明一个十六进制的字符编码

同样在dvbbs论坛也很简单发生一个xss代码如下


xxxxxxxxxxx[/font]


均在新版和老版测验经过。

4 关于修正

关于程序规划者,因为UTF-8字符集的可靠性,不存在这个安全缝隙,所以我们在规划站点的时分能够考虑运用UTF-8字符集。

关于广阔开发者,能够紧记最小输入等于最大安全的准则,在匹配正则的时分约束输入的字符的规模,尽量匹配ascii字符,假如有必要运用中文,能够考虑类似于discuz的在中文后边增加空格修正该问题。

关于广阔用户,这个缝隙因为浏览器处理页面字符的不同,能够考虑运用如Firefox浏览器,能够防止一部分这样的问题。
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯时娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章