介绍 内容安全策略(CSP)是目前最主要的Web安全保护机制之一,这个功能可以有效地帮助管理员降低网站遭受跨站脚本攻击(XSS)和代码注入攻击的可能性。内容安全策略可以让扩展程序在默认情况下变得更加安全,开发者可以创建并强制部署一些安全管理规则,并规定网站可以获取或加载的内容。 内容安全策略以白名单的机制来管理网站加载或执行的资源。在网页中,这样的策略是通过 HTTP 头信息或者 meta 元素来定义的。内容安全策略虽然提供了强大的安全保护,但是它也造成了如下的一些问题:Eval及相关函数被禁用、内嵌的JavaScript代码无法得到执行、以及只能通过白名单来加载远程脚本。这些问题阻碍了内容安全策略的普及,如果想要使用内容管理策略来保护自己的网站,开发者就不得不花费大量时间去分离内嵌的JavaScript代码并对网站作出调整。 需要注意的是,虽然这个功能可以防止攻击者从外部网站来跨域加载恶意代码,但是内容安全策略并不是一种用来防止数据发生泄漏的技术。目前有很多安全研究专家已经提出了各种各样的技术来绕过内容安全策略,并从目标网站中提取出所需数据。 浏览器的DNS预读取机制 浏览器是我们通向互联网世界的大门,而为了让用户获取最佳的上网体验,我们就要尽可能地保证用户的上网速度。因此,网络中每一秒所发生的事情都至关重要。为了实现这个目标,目前较为有效的方法就是浏览器所采用的DNS预读取技术。这项技术的关键之处在于,系统会预先将主机的域名解析为对应的IP地址,然后再将这部分数据缓存已备之后使用。浏览器可以从接收到的页面内容中获取到预解析的主机名称,这样就可以帮助用户节省大量的时间了。 为了管理浏览器的DNS自动预读取功能,我们将需要使用HTTP Header中的“X-DNS-Prefetch-Control”属性[参考资料1][参考资料2]:
这个Header属性有两个值:即“on”或者“off”。默认情况下,如果我们没有专门设置这个属性值的话,使用HTTP协议的页面将会默认启用DNS自动预读取功能,而使用HTTPS进行传输的网页则无法使用该功能。除此之外,开发人员也可以通过在浏览器中使用<link>标签来指定需要进行预解析操作的主机名。比如说,下面这个标签将会让浏览器对域名compass-security.com执行DNS预读取:
漏洞利用 毫无疑问,这项技术确实可以大大降低浏览器加载某些网页所需的时间。但是与此同时,这个功能也将允许攻击者绕过内容安全策略并从浏览器中提取出类似会话cookie以及用户凭证这样的重要数据。接下来,我将会给大家介绍这种攻击技术的实现机制。 请你设想下面这种场景: 攻击者在某个Web应用中发现了一个XSS漏洞,他可以利用这个漏洞来向目标Web应用注入某些恶意的JavaScript代码。但是在内容安全策略的保护下,攻击者无法向他所控制的外部服务器发送任何的数据,所以他也就无法获取到用户的隐私数据了。这个Web应用所设置的内容安全策略非常严格,具体如下所示:
从上面这段命令中我们可以看到,这个Web应用所设置的内容安全策略只允许网站加载来自内部的脚本资源。 但是在DNS自动预读取机制的帮助下,攻击者就可以将他所需要获取的数据包含在有效的DNS域名内,并通过这样的方法来绕过内容安全策略的限制。比如说,会话cookie的值为“abcd1234”,这个值将会与域名进行组合,即转换成“abcd1234.attacker.ch”这种形式,而这个值可以通过下面这个<link>标签来插入至页面的DOM对象中:
接下来,攻击者就可以使用下面这段JavaScript代码来将上面这个<link>标签注入至目标页面:
最新评论
72小时资讯榜
2
NVIDIA首款Windows PC处理器首个跑分出炉!
业界
1670人已阅读
3
你敢信吗?点一个网址,你的安卓手机就能被
网安动态
533人已阅读
4
19岁黑客跨三国换IP狂奔,还是被Windows一
网安动态
539人已阅读
5
18K Star,让AI自己跑渗透测试,这个开源项
渗透测试
491人已阅读
6
一个 1.5B 的模型,把网络安全攻防都装进了
安全学院
602人已阅读
社区热门
1
━※☆※━★===二〇二六年论坛每日签到帖=
2026-03-13
2
人工智能最终是否替代人类??人类该何去何
2026-07-22
5
从上大学一直玩黑基 到现在已经37岁 感谢黑
2025-06-03
|