utf-8 和 GBK ——字符集导致的浏览器跨站脚本攻击

这两个概念总是会在不经意之间又被提及,很遗憾的是,我总会忘记他们具体的内容。

这次当我这次需要了解字符集导致的浏览器跨站脚本攻击时,看到gb2312和GBK字符集在IE处理这些宽字符集的时候存在问题,可导致程序的一些安全规则被Bypass,引发严重的跨站脚本安全漏洞,又不甚理解,为什么UTF-8不会产生如此问题。

先讲下原因:

1 Bypass某些js的检查规则

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

这里即使是过滤了〈>’/等字符一样可以利用非法字符集序列来实现/的作用,因为它会把原来存在的’给结合掉,然后前面的’找不到闭合,后面[User_IN_PUT]就可以用来执行js代码了。

差了些资料,理解了一些原因,列举下:

UTF-8字符集对应的16进制对应二进制如下,可以看见,相对而言,UTF-8具有很强的规律性,所有字节都是以0、11、111、1111等为开头,因此较容易切分。即使插入一个11******的字节,但是它无法和后面的字节组成字。真是很严谨的字符集。相对而言,GBK就逊色了。

0000 0000-0000 007F 0xxxxxxx

0000 0080-0000 07FF 110xxxxx 10xxxxxx

0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx

0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值