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