Page 188 - 《软件学报》2021年第8期
P. 188
2470 Journal of Software 软件学报 Vol.32, No.8, August 2021
and the research directions, including insufficient same-origin policy rules and defenses, attacks and defenses on cross-domain and
cross-origin mechanisms, and same-origin policy security under memory attacks. Finally, this paper prospects the future research direction
of browser’s same-origin policy security.
Key words: same-origin policy; browser security; third-party script; cross-origin scheme; memory attack
浏览器的出现,源自于互联网的发展.20 世纪 80 年代的互联网内容只有纯文本和纯文件,1989 年提出的万
维网为互联网增加了内容布局、文本装饰与媒体等资源.丰富的互联网内容催生了浏览器的出现,早期的浏览
器包括了 Cello,Mosaic 以及当时最受欢迎的 Netscape Navigator.随着网页动态性与面向用户的需求,Netscape
Navigator 于 1994 年增加了“magic cookie”来区分用户,并且在 1995 年提出了改变网络世界的两个新特性:
JavaScript 和文档对象模型(document object model,简称 DOM).DOM 的提出,使得网页 JavaScript 代码能够利用
对应 API 来访问 HTML 文档的所有元素与属性、文档交互触发的事件以及 cookie 等资源.同时,互联网内容的
发展,使得 HTML 文档能够更进一步地引入额外的资源,如其他网页文档或者媒体,这些资源又有自己对应的
cookie,DOM 与 JavaScript 等元素.JavaScript 与 HTML 文档的发展,使得浏览器必须要提供一种方法来安全地实
现代码与资源之间的交互.
浏览器的同源策略(same-origin policy,简称 SOP)被提出来定义浏览器加载的互联网资源的安全边界.
Netscape 的工程师们在 1995 年发行的 NetscapeNavigator 2 浏览器中实现了同源策略.2011 年发布的 RFC6454
[3]
[1]
[2]
标准明确了同源策略中“源”(origin)的定义 ,此后的 W3C 标准 与 HTML5 标准 也对同源策略进行了描述与
定义.同源策略逐渐成为浏览器的基础访问控制策略,诸如 Chrome,Firefox,Safari 与 Edge 等主流浏览器都实现
了同源策略 [4,5] .
同源策略将浏览器加载的所有资源都用一个称为“源”(origin)的字符串定义,该字符串由资源的协议
(scheme)、服务器主机(host)和端口(port)组成,并且确保一个网页中的代码只能访问具有相同源的互联网资源.
同源策略的策略实施发生在网页文档(称之为 frame)访问 Web 资源前,这些资源包括其他 frame 的 cookie,DOM
与 JavaScript 以及 Web 服务器的网络响应等.考虑用户访问了一个银行网站并在该网站上登录了自己账号,银
行网站由于广告等其他需求可能包含了来自第三方的 frame.在没有同源策略的情况下,第三方 frame 的
JavaScript 代码将能够在用户不知情的情况下直接访问银行网站的资源,比如获取用户的银行卡信息与余额,甚
至执行转账操作.而实施了同源策略的浏览器将会在第三方 frame 访问银行网站资源前进行同源检查,由于主
客体属于不同源,浏览器将会拒绝该访问.同源策略的检查将能保证一个 Web 应用的资源(包含该 Web 应用上用
户的隐私数据)不会被其他(不同源)Web 应用所访问,从而实现基于源的 Web 资源隔离.
同源策略的重要性,使得其从诞生到现在一直都被认为是浏览器安全的基石.但是,同源策略在互联网演化
过程中也暴露出来了诸多安全问题,包括同源策略规则不足所引起的安全威胁、跨域与跨源机制的安全威胁以
及内存攻击下的同源策略安全等.
同源策略的规则是浏览器安全中最受关注的部分之一,完备而有效的同源策略规则是 Web 应用安全与用
户隐私安全的基础.然而随着 Web 的发展,Web 应用提出了更多的需求,这使得同源策略规则在提供这些便利性
的同时损失了部分安全性.同源策略允许一个 frame 引入与执行第三方脚本,并且第三方脚本被视为与该 frame
相同的源而具备相同权限 [6−8] ;同源策略赋予同源不同 frame 相同的权限,但由于不同的 URL 路径、在网页中的
不同位置以及不同的历史行为,同源的不同 frame 也需要被赋予不同权限 [9,10] ;同源策略还允许发送任意跨源网
络请求,Web 服务器端不充分的网络请求授权检查将会导致资源泄漏 [11,12] .攻击者可以利用这些同源策略规则
的不足来访问超出其权限之外的资源.
跨域与跨源通信机制是 Web 应用之间实现资源共享的主要方式,但也是攻击者用来绕过同源策略限制以
恶意访问跨域或跨源资源的突破口之一.浏览器所提供的跨域与跨源通信 API 包含了 document.domain 与
postMessage.除此之外,Web 应用还可以利用 JSON-P 与跨域资源共享(cross-origin resource sharing,简称 CORS)
机制来完成跨域与跨源通信.利用这些 API 与协议的脆弱性 [13−16] ,攻击者将可以绕过同源策略的限制来访问跨
源的资源.