IE是怎么处理meta steam的编码的 && 那100+个xss

本文揭示了IE浏览器处理meta标签中的编码方式可能导致的XSS漏洞问题。通过实例展示了当网页中JavaScript资源文件的编码声明与实际不符时,如何触发安全漏洞,并提出了两种解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IE是怎么处理meta steam的编码的 && 那100+个xss


【起源】

最近hei***放言在各个大网站都存在100+个xss。这是的确存在的,问题出在IE处理meta steam的编码策略上。

【原理】

IE是怎么处理meta steam的呢?我举个demo来说明:

[a.php]

<script src="js.php" charset="gbk" type="text/javascript" ></script>

[js.php]

header:Content-Type: text/html; charset=big5

+/v8
alert("+ADs-");

解释步骤:

1. IE渲染a.php时,遇到载入 <script src="js.php" 的请求,此时IE为js.php定义的编码是default:unicode。

2.IE解释charset="gbk"属性时,js.php的编码从default:unicode转为gbk。

3. IE读取js.php,遇到http头“Content-Type: text/html; charset=big5”时,js.php的编码从gbk转为big5。

4. IE获得js.php输出的正文后,检查头几个字节是fffe还是+/v*——如果是fffe,编码转换为unicode;如果是+/v*,编码转化为utf-7。

5.如果该steam是由 <link>标签载入的css文档,就检测@charset标记——如果有,则转化为@charset对应的编码。

(经测试,在IE8下使用http头指定charset后,第4步不会再转化编码。大家自己测试吧)

【导致的问题】

1.文本存储xss

http://hitn.bdimg.com/linx2008/css/item/8e4c24973277cc6d54fb9668.css

+/v8

body {

xxx: expressi+AG8AbgAoA-- (window.x==123456)?1:(x=123456) );

}

(打开hi.baidu.com/linx2008/home,然后输入javascript:alert(x);)在heig**blog上也有demo

2.json的"callback"参数(100+个xss的源头)

http://apps.hi.baidu.com/dashan/data/status?asyn=1&callback=【utf-7头】【utf-7数据流】......

【解决方案】

方法1:对于json的场景,设置header:Content-Type: "json"

方法2:不要让正文输出的第一个符号是"+"。

eg:在数据输出的正文前加个空格or换回;或者过滤"+"开头的参数输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值