浏览器的相同来源策略大家都很清楚。它在保证了用户安全性的同时,也为实现某些类型的Ajax应用造成了很大困难。经常有人尝试用各种方法来绕过相同来源策略,但是很少有人成功。相同来源策略是W3C所规定的一个严格的限制机制,如果能够轻易绕过,那将是这个浏览器版本的重大安全漏洞。
我来总结一下我至今见到过的绕过相同来源策略的几种方法。
1. 通过同一个服务器请求来自不同来源服务器的页面。
在客户端,需要对XMLHttpRequest对象做一下封装。就是以GoF的Decorator模式对XMLHttpRequest对象做封装,得到一个接口完全相同的新对象。这个新对象可以接受对不同来源服务器的请求(XMLHttpRequest对象本身是不接受的),如果发现是对不同来源服务器的请求,在这个新对象的内部将URL转为相同来源服务器上的某个镜象URL。
在服务器端,识别出对不同来源服务器的请求,得到其真实URL,获取其内容返回给客户端。服务器端实现的是一个GoF的Proxy模式。
2. 实现一个HTTP代理服务器,将浏览器设置为使用这个HTTP代理服务器。
客户端和HTTP代理服务器要做的事情和方法1完全相同。
这是Selenium RC所采用的方法。它为了测试任意来源服务器页面中的脚本,运行时自动将自己设置为IE或Firefox的HTTP代理服务器,将一些页面(及其所包含的测试脚本)插入到被测试页面的来源服务器的URL空间,使得浏览器误以为这些测试脚本与被测试页面属于相同的来源服务器。
3. 如果不同的来源服务器提供的是JSON格式的数据,那情况就简单多了。
动态创建一个script标签,将其src属性指向这个URL就可以了。浏览器获取这些JSON数据,立即对其执行eval。你无法做其他什么事情,因为你无法控制这个过程。
这也是以JSON格式暴露出Web服务越来越流行的原因。因为这种方式非常便于客户端脚本集成来自多个数据源的数据。Yahoo!的论坛暴露出的数据就是JSON格式的。
注意:使用这种方法是非常危险的!除非你仔细检查过获取到的JSON数据的内容,确保这些内容没有做任何危害用户的事情;或者你100%信任Yahoo!的服务器管理员,因为他正是你的亲兄弟。否则用户受到的任何恶意攻击,他们都会迁怒于你,你会很快成为众矢之的,甚至会遭到法律诉讼。
4. 使用一个IFrame,父页面的脚本可以修改子页面(就是那个IFrame)URL中#后的内容,子页面也可以修改父页面URL中#后的内容。
这样你在子页面中就可以设置一个onload函数,加载完后通过修改父页面URL中#后的内容,将一些信息传递给父页面。父页面中使用一个周期运行的轮询函数,从自己的URL中取出这些信息。
Dojo里面使用这个技术实现了一种来自不同来源服务器的页面之间的通信机制。
不过这种方法局限性很大:
首先,要给IFrame所加载的页面加onload函数,你必须对这个页面所在的服务器有控制权。否则你就只能试图以木马攻克这个网站,或者行贿这个网站的服务器管理员。
其次,在URL中#后面能够传输的数据量非常少。如果数据量很大,必须要以多次搬运和组装的方式来实现,那样将是非常低效的。
应该还有更多的方法,不过这些方法都有局限,不是那么容易实现的。大家如果感兴趣,可以用电骡去搜索:
XSS Exploits: Cross Site Scripting Attacks and Defense
这本书。这是一本关于这个特定领域非常有趣的书。
分享到:
相关推荐
通过各种手段绕过浏览器的安全策略,如同源策略,以达到非法访问或篡改数据的目的。 #### 四、浏览器简单安全设置 为了提高浏览器的安全性,用户可以采取以下措施: ##### 4.1 常规设置:清除已浏览过的网址 ...
通过研究发现,攻击者可以使用特定的DNS查询来绕过浏览器安全策略,将攻击载荷注入到受害者的网络中。这种攻击方式可能导致路由器等网络设备的敏感信息泄露,攻击者进而能够控制或破坏路由器功能。为了应对这一威胁...
3. **代理服务器**:在前后端分离的架构中,前端可以通过配置代理服务器,将跨域请求转发到目标服务器,从而绕过浏览器的同源策略。例如,使用Webpack开发时,可以配置devServer的proxy选项实现这一功能。 4. **...
3. 代理服务器:在前端和 API 之间设置一个代理服务器,所有跨域请求先发送到代理服务器,由代理转发到目标 API,从而绕过浏览器的同源策略。 4. Window.postMessage:适用于简单页面间的通信,也可以用于跨域 API ...
然而,这种方法可能引发攻击,比如通过攻击向量长度限制绕过。 3. **JSONP (JSON with Padding)**:JSONP是一种规避同源策略的手段,通过动态插入`<script>`标签来请求不同源的数据。服务器返回的脚本会调用客户端...
3. 代理服务器:在服务器端设置一个代理,将跨域请求转发到目标服务器,从而绕过浏览器的同源策略限制。 4. document.domain:适用于同一顶级域名下的子域名间跨域,通过设置`document.domain`为相同的值,可以让...
4. **JSONP(JSON with Padding)**:JSONP是一种绕过同源策略的技术,适用于只读请求。它依赖于动态插入`<script>`标签来加载可执行的JavaScript代码。服务器返回一个JavaScript函数调用,包含需要的数据,客户端...
JSONP是一种通过动态创建`<script>`标签来绕过同源策略的方法。服务端提供一个回调函数名作为参数的接口,客户端设置`src`属性为这个接口URL,并指定一个回调函数,服务端返回的数据会调用这个回调函数。 2. CORS...
3. **代理服务器**:通过在服务器端设置一个代理,将客户端的请求转发到目标资源服务器,从而绕过浏览器的同源策略。 4. **Window.postMessage API**:用于在具有不同源的窗口之间进行通信,例如在嵌入的IFrame和父...
通过在自己的服务器上搭建一个中间层,可以有效地绕过浏览器的同源策略限制,实现跨域数据的顺利获取。当然,这种解决方案也带来了一些额外的维护成本和潜在的安全风险,因此在实际应用中,应当根据项目需求和安全性...
当目标服务器不支持CORS或其他跨域机制时,可以设置一个中间代理服务器,使得客户端先向代理服务器发起请求,再由代理转发到目标服务器,从而绕过同源策略。 七、WebSocket跨域 WebSocket协议提供了一种全双工、低...
这时,可以使用一些插件来辅助开发,比如"Allow-Control-Allow-Origin"插件,它可以临时绕过浏览器的同源策略,方便进行跨域测试。安装并启用这个插件后,开发者可以在本地或者不受控制的环境中更轻松地调试跨域相关...
1. JSONP(JSON with Padding):JSONP是一种绕过同源策略的方法,它利用`<script>`标签可以跨域加载脚本的特性。通过动态创建`<script>`标签,并设置其`src`属性为一个提供回调函数的URL,服务器返回的不再是纯JSON...
这样做的好处是可以绕过浏览器的同源策略限制,缺点是需要额外的服务器资源和维护成本。 ### 如何分析Ajax跨域问题 在排查跨域问题时,通常会借助浏览器的开发者工具来进行分析。具体步骤包括但不限于: 1. **...
该脚本为您提供了直接在浏览器上拍摄网页屏幕截图的工具。 屏幕截图是基于DOM的,因此,鉴于它不是实际的屏幕截图,... 它不能绕过任何浏览器内容策略限制,并且要呈现跨域内容,将需要代理才能使内容具有相同的来源。
然而,这并不总是足够安全,因为存在如P3P(Platform for Privacy Preferences)等绕过同源策略的方法。 **解决Web安全问题**,不仅需要修复漏洞,更应从架构层面考虑。例如,使用HTTPOnly Cookie可以防止...
- **绕过同源政策**:通过`“”>`属性或Remote JSON技术,恶意代码可以利用这些漏洞绕过同源政策,实现跨域数据抓取。 - **域覆盖**:浏览器允许通过设置`document.domain`至超级域来覆盖默认域,从而使得来自同一...
1. JSONP (JSON with Padding):这是一种早期的跨域解决方案,通过动态插入`<script>`标签,利用`src`属性请求JSON数据,服务器返回时包裹在回调函数中,从而绕过同源策略。但JSONP只支持GET请求,且没有错误处理...
通常,这类插件是为了开发者在开发过程中绕过同源策略,以便调试和测试。它们不是生产环境的最佳实践,因为真正的解决方案应该是服务器端设置正确的CORS策略。 压缩包内的文件“Allow-Control-Allow-Origin”可能是...