JavaScud | Forum | JIRA | Blog |
  Dashboard > DWR中文文档 > ... > Ajax Documentation > Cross-Domain Ajax. Security Implications in Depth
  DWR中文文档 Log In View a printable version of the current page.  
  Cross-Domain Ajax. Security Implications in Depth
Added by 黑灵, last edited by 黑灵 on Sep 25, 2006
Labels: 
(None)

跨域Ajax 存在安全问题

一些人认为应该去掉Ajax调用的"同域"限制。 但是Eric Pascarelloxml.com(其他人中)反对。我认为这个争论还没有彻底解决。

Eric提出两点:

  • "script kiddies", 尽管他没有详细阐述跨域XHR能带来的好处。
  • 并且会影响第三方网站的性能。这个问题可以通过代理和缓存解决。

那么我们来深入分析一下。

我能找到两个具体的跨域XHR带来的安全问题:资源窃取和跨站脚本。还有人能想到其他的吗?

资源窃取

资源窃取是这样发生的。当Jack Innocent访问Evil Bob的站点。Evil Bob写了一些XHR代码来不断的重复的调用Victim公司的计算消费的页面。这样Evil Bob利用Jack Innocent来做他的肮脏的工作。

听上去很坏? 事实上我认为这有点夸大其词了。 首先,Evil Bob也可以用iframe做这件事。只要做一个隐藏的iframe来请求那个URL,然后不断刷新就可以了。

我想大家都有过用iframe的经历,可以说跨域XHR并不是会带来大量的资源窃取。

如果互联网平静"咔嚓"一下子被打破了,那么资源窃取倒是可能成为一个问题。但是坦白的说就是互联网处在混乱之中,因为资源窃取的可能性而阻止跨域XHR,就好像是告诉Sony BMG,它们应该让XCP用绿色背景,因为人们发现绿色背景不会产生强迫感。

跨站脚本

第二个问题是跨站脚本。每次你让别人在你的页面里加入一些代码,你相信他们做的事情是任何人用你的web接口都能做的。

有谁会害怕Google吗?至少有些需要担心的事:任何用Google Analytics(就像我)放心的把它们加到网站接口中。Google可以用Analytics来对你的网站进行XSS攻击。

跨域XHR也存在同样的问题, 除非你很小心的使用XHR调用你信任的第三方网站。一些情况这种信任是没问题的,一些则不是。

那么,我们是否应该应为XSS攻击而禁止跨域XHR呢? 我也不确定,但是有一点是肯定的:即使不存在跨域XHR也有很多方式来进行XSS攻击。

影响第三方网站的性能

Eric的第二个问题是:

假设你的服务器在美国,客户端也在美国,但是远程服务在印度。你的请求走了半个地球才得到信息,其实原本可以从美国的服务器上直接得到的。你在增加等待信息的时间。

Ajax给你很多机会可以砸自己的脚。 如果每听到一次有人抱怨"Ajax意味着成千上万的小请求,这会使网站变慢"我可以得到一美元的话,那么我就需要去银行了,因为美元对我没有用;我生活在英国。但是那样我会生活的比现在好。

译者注:我不太清楚作者上面这段话的意思

如果你的设计使你的网站使用无数个小请求,那么肯定会有麻烦 - 所以不要那么做。同样如果你的网站依赖某种很慢的资源,那么网站也会很慢。

Eric是对的,他建议用代理缓存来解决这个问题。但是我们不应该因为有愚蠢的人会乱用跨域XHR就禁止它。

为什么人们需要跨域XHR?

因为它可以使SOA以一种和现在完全不同的方式存在。现在如果我要做一个Mash-up网站,我需要一个特殊的服务器来支持,我要写很多不必要的多余的代码,还要分析Slashdot的内容,我会累死的。有了跨域XHR,我需要的只是Ajax就Ok了。不需要有服务器的支持,不需要服务端代码,不需要请求你的服务器,一切都变得简单了。你也有更多的机会活下去来增加自己的名气。

译者注(名词解释):通过运用Web服务API,能够在极短的时间里开发出在原始服务中添加了附加值的全新应用,业界称其为"mash up"。

但是

还有一个问题 - 我很质疑Firefox 1.5或IE7对Ajax的支持会不会变化。所以我们现在先假装这不是一个问题吧。也有几年后,或者......。

也许你会认为我完全赞成跨域XHR,并非入如此。还有隐藏的安全问题需要考虑。所以要谨慎使用。我只是想知道为什么这个世界上的黑客不顾一切的把魔爪伸向跨域XHR。

还有哪些我没想到的安全问题呢?

Site running on a free Atlassian Confluence Open Source Project License granted to WebWork China. Evaluate Confluence today.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5.3 Build:#808 May 29, 2007) - Bug/feature request - Contact Administrators