Page 203 - 《软件学报》2021年第8期
P. 203
罗武 等:浏览器同源策略安全研究综述 2485
为适应 Web 应用的新型场景,跨域/跨源通信机制随之而来.根据是否需要服务器端的参与,这些跨域/跨源
通信机制可以分为两大类:无服务器辅助通信机制与服务器辅助通信机制.无服务器辅助通信机制依赖于特定
的 JavaScriptAPI,发送方通过调用 document.domain [87] 修改自身身份来实现同域名下跨源通信,也可以通过调用
postMessage [57] 来向跨域的接收方发送需要共享的消息.服务器辅助通信机制既可以依赖于特定的浏览器策
略——跨域资源共享(CORS) [88] ,也可以由开发者利用一些 HTML 特性来自定义实现,如 JSON-P [89] .图 5 总结了
两大类跨域/跨源通信机制的发展过程,本节将重点对这两类机制的现有研究工作进行总结分析.
Fig.5 Cross-domain/cross-origin communication mechanisms
图 5 跨域/跨源通信机制
4.1 无服务器辅助通信机制威胁与应对
4.1.1 document.domain 跨域通信
(1) 机制概述
网页可以通过对 document.domain 的赋值来将自身提升为父域名.举例来说,一个网页的 URL 为 http://mail.
xyz.com:8080/index.html,则该网页的源为三元组〈http,mail.xyz.com,8080〉,当该网页执行了 document.domain=
“xyz.com”后,浏览器将该网页的源更新为三元组〈http,xyz.com,null〉.注意,源中的端口字段被设置为空(null).当
目标网页来自于父域名(如 http://xyz.com:8080/)或者兄弟域名(如 http://video.xyz.com:8080/),并且执行了
document.domain=“xyz.com”时,目标网页的源更新为三元组〈http,xyz.com,null〉.此时,浏览器的同源策略将本网
页与目标网页视为同源,从而允许资源访问.特别地,一个网页不能设置 document.domain 为顶级域名,如.com,
.org 等,且〈http,xyz.com,8080〉与〈http, xyz.com, null〉不同源.
(2) 安全威胁与应对
使用 document.domain 进行跨源通信的安全威胁,是同源策略在处理资源访问上的不一致性.Singh 等人 [13]
阐述了这种不一致性,并据此构造了多种攻击来绕过同源策略的限制.一个源的资源包含了 DOM 和 JavaScript
对象、cookie、本地存储以及用来发起网络请求与获取网络响应的 XMLHttpRequestAPI.当一个网页使用
document.domain 进行域名提升后,我们称提升后的源为该网页的有效标识(effective ID).在域名提升之后,当该
网页访问其他网页的 DOM 和 JavaScript 对象时,同源策略将使用有效标识进行决策.但是,对于 cookie 和本地存
储的访问以及 XMLHttpRequest 的使用,同源策略仍然使用该网页初始的源作为访问主体标识.基于同源策略在
检查资源访问时处理有效标识的不一致性,攻击者网页能够构造攻击来偷取受害者网页的 cookie 与本地存储、
获取受害者网站服务器数据(如获取用户邮箱等)或更改受害者网站服务器状态(如转账等操作).
图 6 给出了通过利用这种不一致性来获取跨源 cookie 与网络资源的攻击.在这一类攻击中,受害者网站
(x.a.com)上有一个网页(1.html)使用 document.domain 将其有效标识设置为 a.com,这种域名提升将允许 1.html
访问 a.com 的某些资源.然而,当攻击者拥有来自于 y.a.com 的网页 attacker.html 时,攻击者将具备发起此类攻击
的条件.具体攻击过程如下.
1) attacker.html 向 1.html 注入脚本.由于 attacker.html 与 1.html 的有效标识一致,同源策略将允许 attacker.
html 访问 1.html 的 DOM 对象,从而实现恶意脚本的注入.