Page 189 - 《软件学报》2021年第8期
P. 189
罗武 等:浏览器同源策略安全研究综述 2471
内存攻击是破坏软件安全的重要攻击手段,浏览器作为软件也不可避免地面临着内存攻击.浏览器引入了
JavaScript 引擎(包括解释器与即时编译器)来执行网页的 JavaScript 代码.JavaScript 代码相当于 JavaScript 引擎
的输入,恶意的输入有可能利用 JavaScript 引擎中的漏洞,从而实现恶意代码注入 [17−19] 、代码重用攻击 [20,21] 以及
仅数据攻击 [22,23] .成功发起基于内存的攻击,意味着浏览器的功能受到破坏,攻击者将能绕过或者欺骗同源策略
来直接访问跨源资源.
如何解决这些安全问题,已经成为了学术界的研究热点.本文重点分析了现有浏览器同源策略安全的研究
进展,深入讨论了同源策略规则的不足与应对方案;分析了跨域与跨源通信机制所引起的安全威胁与防御方案;
并进一步讨论了内存攻击情况下的同源策略安全;最后,结合同源策略当前面临的安全问题,展望了该机制的未
来发展方向.
1 同源策略概述
1.1 术语定义
网页资源的多样性,使得浏览器环境中存在大量的术语,为便于描述,表 1 中总结了与同源策略相关的访问
控制主客体术语定义.
Table 1 Descriptions for related terms
表 1 相关术语描述
术语 描述 HTML/JavaScript 代码示例
网页可以引入多个子网页来将自身划分为多个独立的
部分,每个部分被称为 frame.被划分的网页可称为主 JavaScript 可通过 window.frames[i]
frame frame(main frame).相应的术语有:父 frame、子 frame、 来引用第 i 个子 frame,可通过
第三方 frame(与父 frame 不同源的子 frame)、 window.parent 来引用父 frame
frame 结构(网页中的所有 frame 及其关系)等
HTML 语言中的一个标签,一个 frame 可以 HTML:〈iframe src=
主体 iframe 通过该标签将另一个网页引入为其子 frame “URL of the childframe”/〉
相关 每个 frame 具有对应的 window 对象,可以 JavaScript 可通过 window.foo
Window 对象
视为该 frame 的 JavaScript 代码的 this 指针 来获取该 frame 的全局变量 foo
每个 frame 可以通过 HTML 语言的 script 标签来引入并 HTML:〈script src=
第三方脚本
执行其他源的 JavaScript 脚本,这些脚本被称为第三方脚本 “URL of the third-party script”/〉
宿主 frame
(hostframe) 承载第三方脚本的 frame 被称为宿主 frame N/A
JavaScript 可通过
在渲染网页时, 浏览器将 HTML 元素转变为文档
DOM 对象 document.getElementById(“ID”)
对象模型(Document Object Model,简称 DOM)存储
等 API 来获取 DOM 对象的引用
JavaScript 对象 Frame 中的 JavaScript 代码执行过程中所产生的对象 N/A
Frame 中的 JavaScript 代码能够 JavaScript 可通过 XMLHttpRequest
网络资源
客体 发起网络请求来与服务器进行通信 API 来发送网络请求与读取响应
相关 由 Web 应用服务器与浏览器共同维护的资源,通常在 JavaScript 可通过 document.cookie
cookie
用户登录 Web 应用后设置,可用来进行用户身份认证 API 访问 cookie
本地存储 浏览器为 Web 应用所维护的 JavaScript 可通过 localStorage
(local storage) 本地资源,以键值对形式存在 API 访问本地存储
会话存储 与本地存储相似,但为临时存储, JavaScript 可通过 sessionStorage
(session storage) 在浏览器关闭后将会被删除 API 访问会话存储
1.2 同源策略规则
[5]
同源策略是浏览器安全的基础安全策略 .浏览器为每个加载的 frame 设置一个称为“源”的属性.区别于网
站(site)与域名(domain),源是一个三元组:〈scheme,host,port〉.其中,scheme 是指网址的协议,如 http 或 https 等;host
是指服务器主机在因特网上的域名,与 domain 不同,host 涵盖了子域名,如 abc.xyz.com;port 是指服务器提供网
站服务的端口,如 8080.
同源策略的检测要求是“同源”,即主体与客体所在 frame 的源的三元组需要完全一致.例如,frame https: