介绍 现代浏览器可以猜测响应的内容类型,即使它没有实际的contenttype头。此外,即使ContentType头已经就位,浏览器也不一定会遵从设定的Header的值。这种猜测是通过驻留在大多数浏览器中的一个称为mimesniffing的固有函数实现的。尽管引入mimesniffing是为了在缺乏头文件定义的情况下促进功能,但默认情况下启用的mimesniffing可以促进发现某些条件下的跨站点脚本(XSS)。 假设一个web应用程序允许其用户上传图像文件,而这些文件又通过某个端点提供服务。如果它们没有任何ContentType头,那么攻击者可能会上传包含恶意JavaScript代码的HTML文档来代替合法图像。一旦完成,下一步将是获取服务恶意HTML页面的直接URL,该页面将被传递给下一个不知情的受害者,最终导航到该页面。 影响及危害 缺少ContentType报头,或者至少配置错误,会导致上面所写的XSS攻击。因此,影响的规模取决于web应用程序受到XSS攻击的能力和敏感性,而XSS攻击是由于ContentType错误配置而启用的 如何防护 为了防止由于无效或缺少ContentType头而发生mimesniffing错误,开发人员必须: 根据所服务的文件提供有效的ContentType头 将XContentTypeOptions报头设置为nosniff,这样浏览器就不会尝试猜测内容类型。 验证每个HTTP响应都包含一个ContentType报头。text,xml和applicationxml内容类型也应该指定一个安全字符集(例如UTF8,ISO88591)。