Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AJAX跨域安全的基本原理是什么?_Javascript_Ajax - Fatal编程技术网

Javascript AJAX跨域安全的基本原理是什么?

Javascript AJAX跨域安全的基本原理是什么?,javascript,ajax,Javascript,Ajax,考虑到编写跨域获取数据的服务器端代理的简单性,我不知道阻止客户端AJAX跨域调用的最初意图是什么。我不是在要求猜测,我是在寻找语言设计师(或与他们关系密切的人)关于他们认为自己在做什么的文档,而不仅仅是给开发人员带来一些不便 TIA此限制的最重要原因是一个安全问题:JSON请求是否应使浏览器服务并接受cookie或安全凭据以及对另一个域的请求?这与服务器端代理无关,因为它不能直接访问客户端环境。有,但还没有在任何地方实现。如果您是myblog.com的作者,并且您向facebook.com发送了

考虑到编写跨域获取数据的服务器端代理的简单性,我不知道阻止客户端AJAX跨域调用的最初意图是什么。我不是在要求猜测,我是在寻找语言设计师(或与他们关系密切的人)关于他们认为自己在做什么的文档,而不仅仅是给开发人员带来一些不便


TIA

此限制的最重要原因是一个安全问题:JSON请求是否应使浏览器服务并接受cookie或安全凭据以及对另一个域的请求?这与服务器端代理无关,因为它不能直接访问客户端环境。有,但还没有在任何地方实现。

如果您是myblog.com的作者,并且您向facebook.com发送了XHR,那么请求是否应该发送您的facebook cookie凭据?不,这意味着你可以从你的博客中请求用户的私有facebook信息

如果您创建代理服务来执行此操作,您的代理将无法访问facebook cookies


您可能还会问为什么JSONP是可以的。原因是你正在加载一个你没有编写的脚本,所以除非facebook的脚本决定从他们的JS代码向你发送信息,您将无法访问它

直接访问和代理之间的区别是cookie和其他安全相关的标识/验证信息,这些信息绝对限于一个来源

通过这些,您的浏览器可以访问敏感数据。您的代理不会,因为它不知道用户的登录数据


因此,代理仅适用于公共数据;原样。

这是为了防止浏览器充当反向代理。假设您正在办公室的PC上浏览,并且假设该办公室中存在一个内部网,其中包含仅可从本地网络访问的敏感信息。 如果跨域策略不存在,www.evil.com可以使用浏览器作为反向代理向发出ajax请求,并将该信息与另一个ajax请求一起发送到www.evil.com


我想这就是限制的原因之一。

我知道你在问专家的答案,我只是个新手,这就是我对服务器端代理为什么不是合适的最终解决方案的看法:

  • 构建服务器端代理并不像根本不构建它那么容易
  • 不像在第三方JS小部件中那样总是可能的。您不会要求所有发布者为集成您的小部件声明DNS注册。并修改他页面上有共同问题的
    文档.domain
  • 正如我在书中读到的“它需要加载一个中间隧道文件,然后才能发出跨域请求”。至少你在游戏中加入了JSONP,玩了更复杂的杂耍
  • IE8不支持,同样来自上面的书:“IE8有一个相当奇怪的bug,它阻止顶级域与其子域通信,即使它们都选择了一个公共域名称空间”
  • 正如人们在其他答案中所解释的,有几个安全问题,甚至比它们更重要的是,您可以使用上述书中的子域代理检查第4.3.2章消息交换
对我来说最重要的是:

  • 这是一次黑客攻击。。像JSONP解决方案一样,现在是时候提供一个标准、可靠、安全、干净和舒适的解决方案了
但是,在重新阅读您的问题后,我想我仍然没有回答它,所以为什么要使用AJAX安全性?,我再次认为,答案是:


因为您不希望您访问的任何网页能够从桌面呼叫任何计算机或服务器进入您办公室的内部网

整本书都值得一读。@jassonpet Awesome link,书签@Jassonpet,你应该把这个链接作为答案,我会打勾的。我不同意他们的担忧,但我可以看出这是他们的理由,这正是我的问题。是的,这是:)。。。比我的答案更清楚的是,我迷失了方向,这似乎非常牵强。您的内部网必须有AJAX响应程序,evil.com必须知道如何调用这些响应程序!如果这真的是问题所在,那么内部网也不能运行任何CGI,对吗?正如@GrabrielJürgens所说,如果没有跨域策略,您的内部网中的任何URI(不仅仅是CGI,我不知道AJAX响应程序是什么)都会受到损害。攻击者可以知道要调用的特定URI,或者只是进行暴力尝试,这并不重要,这是一个真正的安全问题。嗨@Dr.Dredel!我不确定我是否理解yo写的关于CGI的内容,但是使用Ajax,您可以访问http服务器托管的几乎任何文档,不一定是CGI,而且在我看来,如果假定攻击者不知道假定的私有URL,那么传递浏览器的安全性不是一个好的做法。就我个人而言,我不会使用任何允许黑客在我的本地网络上这样做的浏览器。也许我对XHR不太熟悉。。。XHR是否具有拉取和检查cookie的固有能力?我认为cookies是一种独立的机制,而XHR是一种专门用于HTTP请求的数据传输机制。XHR是一种HTTP请求。它总是为您所连接的域发送cookies,就像您从该域请求HTML页面或图像一样,如果您对自己的页面进行XHR,或者从另一台服务器请求图像、脚本,甚至iframe,请查看标题,正如我前面所说的,这完全是一个骗局。如果您的intranet设置为接收和处理cgi请求,那么该页面也很可能利用这些请求。这根本不是现实世界的问题!