Internet Explorer 更改 MIME 处理方式以提高安全性

  • 崔康

2010 年 10 月 27 日

话题:Java安全微软DevOps语言 & 开发架构文化 & 方法

来自 Web 服务器的每一个文件都有对应的 MIME 类型(也称为 content-type),描述文件内容的属性,比如图片、文件、应用等。最近,IE 开发经理 Eric Lawrence 在 IE 官方博客中就MIME 处理方式的变化和安全性做了详细解释。

以前,某些 HTML 元素(特别是 Link 和 Script)不会验证 Web 服务器提供的 MIME 类型。例如,即使 Script 的 src 属性指向一个声明为 text/plain 类型的文件,浏览器也会运行 Script 脚本。Eric 强调这种方式存在安全隐患:

这会导致一些安全漏洞,特别是 Link 元素。

比如这样一种攻击,恶意网站包含一个指向另一网站 HTML 内容的 Link 引用。如果 HTML 内容包含常见字符,那么可能会被恶意网站的页面脚本访问。这种信息泄露会导致跨网站请求伪造和其他攻击(详见 Carnegie-Mellon 大学的一篇论文)。

在最近发布的一个安全更新中,微软开发团队修改了 IE6/7/8 的 CSS 处理方式——阻止所有跨源样式表(cross-origin stylesheet)除非它们声明了正确的 HTTP 相应头:Content-Type: text/css,这种保护措施可以确保 Link 和 @IMPORT 不会成为窃取其他网站内容的帮凶。

对于 IE 9 来说,除了修复以上问题,在 MIME 处理方面还包括了三个重要的安全性变化:

  1. 在 IE 9 标准模式下,同源样式表也必须采用正确的 text/css 类型,否则会被忽略。
  2. 如果服务器端指定 X-Content-Type-Options: nosniff,那么 Script 元素将拒绝错误的 MIME 类型响应,在这种情况下正确的 MIME 类型是 ["text/javascript"、"application/javascript"、"text/ecmascript"、"application/ecmascript"、"text/x-javascript"、"application/x-javascript"、"text/jscript"、"text/vbscript"、"text/vbs"]。
  3. 采用text/plain类型传输的文件,IE 不会主动将其判定成另一类型。
Java安全微软DevOps语言 & 开发架构文化 & 方法