Page 204 - 《软件学报》2021年第8期
P. 204

2486                                   Journal of Software  软件学报 Vol.32, No.8,  August 2021

                    2)   注入到 1.html 中的恶意脚本发起攻击.如图 6(a)所示,恶意脚本可以访问与 1.html 同源的 2.html,从而
                         可以借助 2.html 获取 x.a.com 的 cookie,并返回给 attacker.html;如图 6(b)所示,恶意脚本可以直接调用
                         XMLHttpRequestAPI 向 x.a.com 服务器发送恶意网络请求,并成功获取服务器返回的网络响应.

                      a" acker.html                 1.html       a" acker.html                 1.html
                      源: y.a.com                  源: x.a.com     源: y.a.com                   源: x.a.com
                                1. 注入脚本          有效标识: a.com              1. 注入脚本           有效标识: a.com
                    有效标识: a.com                                有效标识: a.com
                                 3. 返回目标     2. 获取目标源                       3. 返回目标源    2. 获取目标源的
                                                                              的网络响应
                                    cookie

                                  □            cookie                        □            网络响应
                            同源策略拒绝                  2.html              同源策略拒绝
                            访问不同源的                 源: x.a.com           访问不同源的             源: x.a.com
                               cookie
                                                有效标识: x.a.com            网络响应
                                 (a)  获取跨源 cookie                          (b) 发送恶意网络请求
                         Fig.6    Two attacks by using the inconsistency of same-origin policy on document.domain [13]
                              图 6   利用同源策略对 document.domain 机制的不一致性发起的两种攻击              [13]
                    Singh 等人 [13] 认为,解决这种攻击的措施是让同源策略在处理 cookie 与 XMLHttpRequest 等 API 时也使用
                 有效标识.然而,采用这种措施可能会造成其他的安全问题.例如,来自于 y.a.com 的恶意网页 attacker.html 在提升
                 域名为 a.com 后,将能够获取 a.com 的 cookie.考虑到这些安全问题的存在,到目前为止,仍然没有被广泛接受的
                 防御方案,而目前的浏览器依然受到这一系列攻击的影响.值得庆幸的是:发起这类攻击需要攻击者拥有一个与
                 受害者网页的兄弟域名,这在一定程度上增加了攻击者发起攻击的难度与成本.但不论如何,研究一种不影响可
                 用性且能防御该类攻击的方案是很有必要的.
                 4.1.2    postMessage 跨源通信
                    (1)  机制概述
                    基于 document.domain 的通信机制要求通信双方网页具备相同的域名后缀,而基于 postMessage 的通信机
                 制没有这一限制,从而允许向任意源的网页发送数据.由于网页大量地内嵌第三方网页用作用户追踪、性能分
                 析等,postMessage 得以广泛使用    [90] .
                    图 7 给出了 postMessageAPI 的使用示例.在该示例中,来自 alice.com 的 frame A 使用 iframe 标签内嵌了来
                 自 bob.com 的子 frame B,因此,frame B 的 window.parent 将指向 frame A 的 window 对象.Frame B 执行了 window.
                 parent.postMessage 来向 frame  A(由 window.parent 指定)发送跨源消息.postMessage 的第 1 个参数为消息内容,
                 第 2 个参数为预期接收者的源.当 frame  A 收到消息时,frame  A 中事先注册的消息处理函数 handler(可自定义)
                 将被调用,其参数为 event,包含 3 个成员:event.source(发送方的 window 对象),event.data(消息内容),event.origin
                 (发送方的源).Frame A 可以使用 event.source.postMessage 向 frame B 返回消息.












                                  Fig.7    Example usage for postMessage communication mechanisms
                                            图 7   postMessage 通信机制的使用示例
   199   200   201   202   203   204   205   206   207   208   209