Page 206 - 《软件学报》2021年第8期
P. 206
2488 Journal of Software 软件学报 Vol.32, No.8, August 2021
可以通过验证该秘密数据来判断发送方是否为授权方;第 2 种方式要求接收方组合 event.origin 与 event.source
来验证发送方身份,合理地组合这两个对象,能够实现接收方只接受某个特定源的特定网页发送的消息.
Weissbacher 等人 [92] 提出了一个检测这类安全威胁的系统 ZigZag.通过透明地在网页代码中插桩,ZigZag 能够在
浏览器执行过程中实时地执行不变量检测.从这些不变量中,ZigZag 推断出网页代码的正常行为模型,这些模型
捕获客户端 Web 应用程序组件如何交互(以及与谁交互)的基本属性以及与浏览器中的控制流和数据值相关的
属性.使用这些模型,ZigZag 可以自动检测与这类安全威胁高度相关的模型的偏差.
此外,浏览器的事件机制使得 postMessageAPI 存在隐私泄漏的风险.Guan 等人 [93,94] 针对于这类安全威胁给
出了具体的攻击场景与攻击方案,并且提供了对应的抵抗措施.Guan 等人首先分析了目前的网页中一个普遍的
使用范例.当网页 A 内嵌第三方网页 B 并使用 postMessageAPI 进行通信时,目前网页开发者倾向于在网页 A 中
引入 B 的一个脚本当作第三方库,这个第三方库将在网页 A 中注册消息处理函数来完成诸如消息格式解析等任
务.据此,网页开发者不需要了解网页 B的消息通信机制,使得开发更加便利.然而,当网页 A由于功能需求需要内
嵌多个第三方网页(如 B 和 C)时,B 和 C 都将在网页 A 中注册消息处理函数.当网页 A 收到消息时,根据浏览器
的事件机制,所有在网页 A 中注册的消息处理函数都会被触发,这意味着网页 B 向 A 发送的消息将能够被 C 所
监听.当消息中存在秘密数据如 cookie 时,用户在 B 网站上的隐私将可能会被 C 所破坏.
Guan 等人 [93] 将这类攻击称之为 DangerNeighbor 攻击.他们还对目前 top 5000 的网站进行了调研分析,发现
28.8%的网站注册了消息处理函数,10.88%的网站注册了来自不同源的多个处理函数,因而可以认为,10.88%的
网站可能会受到 DangerNeighbor 攻击的影响.为抵抗 DangerNeighbor 攻击,发送方需要发送加密数据而非消息
明文;接收方利用 JavaScript 函数的特性,封装注册消息处理函数,同时封装的处理函数负责调用相应的原处理
函数,而其他处理函数不被调用,从而解决 DangerNeighbor 攻击所带来的隐私泄漏威胁.
4.2 服务器辅助通信机制威胁与应对
4.2.1 JSON-P 跨源通信
(1) 机制概述
基于 JSON-P 的跨源通信机制的基础是同源策略允许内联第三方脚本.如图 9 所示:来自于 alice.com 的网
页可以借助〈script〉来内联一个跨域的网站 bob.com 的脚本 data.js,虽然该网页无法读取 data.js 的内容,但是同源
策略允许 data.js 在该网页中执行.此时,若 bob.com 希望把自己的某些数据共享,其可以在 data.js 中调用一个
my_callback 函数,其参数为需要共享的数据,并且以 JSON 的形式存在.当 alice.com 的网页事先定义了 my_
callback 函数时,data.js 将调用该预先定义的函数,从而网页可以获取到来自跨源的 bob.com 的数据,实现跨源或
跨域资源共享.特别注意的是:JSON-P 只能支持 GET 请求,不能支持 POST 等其他请求.
h" ps://alice.com/index.html
// 1. 定义目标JavaScript中使用的函数
function my_callback(data) {
// handle data
} bob.com
// 2. 引入目标JavaScript文件,该文件执 // data.js
行时将调用my_callback函数 my_callback({“d”: data})
<script src=“https://bob.com/data.js” />
Fig.9 Example usage for JSON-P cross-origin communication mechanisms
图 9 JSON-P 跨源通信机制的使用示例
(2) 安全威胁
基于 JSON-P 实现的跨域机制依赖于同源策略对引入跨域脚本的允许以及服务器端的辅助,其面对的一个
最大的安全威胁是如何防止攻击者网页(如 https://alice.com/index.html)访问服务器想要共享的 JSON-P 资源(如
https://bob.com/data.js).Popescu [15] 按照服务器端共享资源的方式,总结了恶意获取 JSON-P 资源的几种途径.