弱弱地问一句,浏览器为什么要限制Ajax跨域?一直想不通在什么场合Ajax跨域有安全性问题,求点拨。

解决方案 »

  1.   


    很安全啊,如果需要用到第三方的数据接口,那必然是相信它提供的数据是安全的,否则,哪有人愿意在自己网站上放挂马的code?在使用跨域的场合,当然是跨到你相信的域里边去拿数据。至于被跨域的域后端,我也想不出有什么不安全的。
      

  2.   

    打个比方
    某个网站的某张页面被你写入了一些js ,这些js有些ajax操作
    如果某个用户访问了这张页面,你的js就可以获得用户的某些信息(cookie,本地文件等)然后通过ajax发送回你的服务器。 这就是安全问题,信息泄漏
      

  3.   

    非公共的API,都会给特定的使用者唯一的私钥,来验证请求的合法性.
    至于公共的API,都会限制你post的数据的容量
      

  4.   


    aspwebchh说的是重点。你说的这个不是ajax要限制跨域的原因。试想,后端返回什么数据,完全由他的后端来决定。如果会发生信息泄漏,那是后端安全没做好啊。完全可以判断http请求的Referer来限制数据啊。我是说,当初设计Ajax的时候,为什么限制了Ajax跨域?其原因是什么。
      

  5.   

    限制跨域并不仅针对ajax
    不管你用什么技术,跨域的操作就意味着A网站可以操作B网站的页面
    这个有无穷的风险
    凡是B网站上登录确认身份之后不需要进一步验证就可以操作的都有被A网站利用的可能
      

  6.   


    还能回帖么?我今天突然又想到这个问题,还是没有悟透。3楼,之前没想明白。但是突然想到,ajax限制跨域是为了避免xss的时候很方便就能偷走信息的话,那么,即使不用ajax,用一个iframe也能偷走信息啊。创建一个隐藏的iframe,然后src指向自己的域,在url里带上从cookie里偷到的东西。额,对,用一个script标签也可以。所以封住ajax跨域,并不能防止xss盗走信息啊。这样说来,为什么要废掉ajax跨域的武功,我又糊涂了
      

  7.   


    似乎有点明白了。让我理一理。
    假设,先假设浏览器没有限制跨域,A站的xhr请求B站的一个url,那么浏览器是要带上谁家的cookie一起请求呢?(每次http请求都要带上该站下的所有cookie)显然是B家的。假设B家的网站当前用户已经登录,那么cookie里自然记录下了sessionId相关的东西以标识当前用户的身份,那么本次xhr请求很easy的通过了身份认证,然后后果就是不堪设想的。突然感觉明白了,不知道是不是这么想的。假如ajax允许跨域,A站的xhr请求B站的一个url,带的是B站的cookie,这里就存在冒用当前B站的用户身份的嫌疑,我想问题就在这里吧。