受影响系统: Internet Explorer是Windows操作系统中默认捆绑的web浏览器。 Internet Explorer 8中引入了新的跨站脚本防范机制,其基本原理是在浏览器中创建过滤器以检测和防范某些类型的恶意跨站脚本攻击。过滤器会在出站请求中扫描恶意字符串,如果检测到了字符串就会动态生成匹配出站字符串的正则表达式。之后浏览器会在服务器响应中查找相同的模板,如果找到了任何匹配就认为遇到了反射式的跨站脚本,这时浏览器会自动更改响应以使跨站脚本攻击失效。 Internet Explorer 8中使用了一种“中和”技术来完成上述操作。具体来讲,当过滤器完成上述匹配时就会修改某些字符串,这样攻击就无法执行。例如,如果在出站请求的GET参数和响应体中都检测到了<script>alert(0)</script> 字符串,就会触发中和机制,将该字符串更改为<sc#ipt>alert(0)</script>,这样所注入的脚本就无法执行。在大多数检测到恶意注入的情况下,Internet Explorer 8都会使用“#”字符替换响应中的字符。 但是,浏览器在呈现之前更改服务器的响应可能会产生非预期的结果,攻击者可以滥用中和机制阻断页面中的无害内容。例如,如果<script字符串出现在请求和响应中,就可以触发过滤器。如果攻击者附加了类似于&foo=<script的GET参数,Internet Explorer 8就会触发中和机制。 阻断网页中嵌入的无害JavaScript的另一个后果是浏览器会将JavaScript代码本身错误的解释为HTML,在某些情况下本无跨站脚本却会导致跨站脚本。例如,假设网页持续一致的在JavaScript字符串中包含用户所控制的内容但剥离掉单引号、双引号和斜线字符(但不过滤尖括号),则攻击者可以注入<img src=x:x onerror=alert(0)>字符串。正常情况下这种方式无法利用,因为无法从封装的JavaScript字符串括号中转义所注入的字符串,但强制中和打开的脚本标签会将脚本块解析为HTML,允许所注入的脚本执行警告。 <*来源:Eduardo Vela Nava 测试方法:
建议: Microsoft |