13.3 同源策略深入讨论

在本章和前一章中,我们介绍了如何将同源策略应用于HTML和JavaScript的大量示例,以及利用应用程序漏洞和浏览器怪癖突破这种策略的各种方式。为进一步了解同源策略对于Web应用程序安全的重要性,我们将在这一节中介绍其他一些适用该策略的情形,以及这些情形如何会导致某些跨域攻击。

13.3.1 同源策略与浏览器扩展

各种广泛部署的浏览器扩展技术全都在域之间实施了某种隔离,这种隔离的实施方式与主要的浏览器同源策略所采用的基本原则相同。但是,每种实施方式的一些特点在某些情况下可能会导致跨域攻击。

1.同源策略与Flash

Flash对象的来源由加载这些对象的URL所在的域决定,而不是由加载这些对象的HTML页面的URL决定。和浏览器中的同源策略一样,默认情况下,将基于协议、主机名和端口号实施隔离。

除与同一来源进行完全双向交互外,Flash对象还可以通过浏览器使用URLRequest API提出跨域请求。与纯粹的浏览器技术相比,以这种方式提出请求可以对请求实施更进一步的控制,如能够指定任意的Content-Type消息头及在POST请求主体中发送任意内容。将对这些请求应用浏览器cookie,但默认情况下,提出这些请求的Flash对象并不能读取对跨源请求做出的响应。

Flash提供了一种机制,各种域可通过这种机制向来自其他域的Flash对象授予权限,以便于这些对象与它们进行完全双向的交互。通常,授予权限的域会在URL /crossdomain.xml处发布一个策略文件,从而完成这一任务。当某个Flash对象尝试提出双向跨域请求时,Flash浏览器扩展 将检索所请求的域中的策略文件,并仅在所请求的域授权对提出请求的域的访问权限时,才允许上述请求。

由www.adobe.com发布的Flash策略文件如下所示:

img408