Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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 理解CORS安全:什么';使用允许浏览器跨域访问的服务器是什么?_Javascript_Ajax_Security_Cross Domain_Cors - Fatal编程技术网

Javascript 理解CORS安全:什么';使用允许浏览器跨域访问的服务器是什么?

Javascript 理解CORS安全:什么';使用允许浏览器跨域访问的服务器是什么?,javascript,ajax,security,cross-domain,cors,Javascript,Ajax,Security,Cross Domain,Cors,我刚刚发现,为了允许跨域AJAX调用,应该在服务器端设置accesscontrolalloworigin头。这看起来让我很沮丧,让我解释一下原因: 1) 典型的用例是客户端希望发出跨域请求。我从来没有听说过服务器试图限制外来网页的访问。哦,我记得“防止图片热链接”,这是我的主机的一个有趣功能,通过发送假“推荐人”标题可以轻松击败它 2) 即使服务器想要限制来自其他域的连接,使用HTTP协议的功能也不可能做到这一点。我建议使用代币 3) 在仍然可以使用jsonp的情况下阻止XMLHttpReque

我刚刚发现,为了允许跨域AJAX调用,应该在服务器端设置
accesscontrolalloworigin
头。这看起来让我很沮丧,让我解释一下原因:

1) 典型的用例是客户端希望发出跨域请求。我从来没有听说过服务器试图限制外来网页的访问。哦,我记得“防止图片热链接”,这是我的主机的一个有趣功能,通过发送假“推荐人”标题可以轻松击败它


2) 即使服务器想要限制来自其他域的连接,使用HTTP协议的功能也不可能做到这一点。我建议使用代币

3) 在仍然可以使用jsonp的情况下阻止XMLHttpRequests有什么用

你能解释一下为什么这样做吗

对于那些仍在阅读的人,有一个额外的问题:

4) 你知道一种防止网页跨域请求的方法吗?想象一下,一个初级web开发人员在一个页面上创建一个登录表单,页面上有广告或其他脚本,可能会嗅探密码?这难道不是网络安全的本质吗?为什么有人在谈论这个

我从来没有听说过服务器试图限制外来网页的访问

同源策略是由浏览器而不是服务器施加的限制


CORS是告诉浏览器它可以放松其正常安全性的服务器,因为数据不需要那种级别的保护



即使服务器想要限制来自其他域的连接,使用HTTP协议的功能也不可能做到这一点

这就是为什么HTTP协议不用于此目的

我建议使用代币

使用nonce来防止CSRF解决了另一个问题

这是一个相对昂贵的解决方案,只有当请求的副作用可能有问题时(例如“发布新评论”),您才需要退出,而不是将数据传递回另一个站点上运行的JavaScript

您不能使用它们而不是同源策略来防止跨源读取数据,因为(如果没有同源策略)攻击站点将能够读取令牌


在仍然可以使用jsonp的情况下阻止XMLHttpRequests有什么用

除非服务器在JSONP中提供数据,否则不能使用JSONP

在JSONP中提供数据和使用CORS授予访问资源的权限是服务器允许浏览器访问通常受同源策略保护的数据的两种不同方式

JSONP是一个黑客。CORS来得晚,而且更灵活(因为它可以允许访问任何类型的数据,响应GET以外的请求方法,并允许添加自定义HTTP头)


你能解释一下为什么这样做吗

默认策略为“禁止访问”,因为浏览器无法知道所请求的数据是否为公共数据

考虑这种情况:

爱丽丝在鲍勃的网站上有一个帐户。该帐户受密码保护,并且其信息应在Alice和Bob之间保密(例如,银行记录或考试结果)

马洛里有另一个网站。它使用Ajax尝试访问Bob的站点

如果没有相同的原产地政策,Alice可能(在登录Bob的网站时)访问Mallory的网站。在Alice不知情或未经许可的情况下,Mallory的网站将JavaScript发送到Alice的浏览器,该浏览器使用Ajax从Bob的网站获取数据。因为它来自Alice的浏览器,所以Alice的所有私人信息都被提供给JavaScript。然后JavaScript将其发送给Mallory

这显然不是一件好事

同一原产地政策防止了这种情况

如果运行站点的Bob认为信息不是秘密的,可以公开共享,那么他可以使用CORS或JSONP提供对其他站点上运行的JavaScript的访问


你知道一种防止网页跨域请求的方法吗

否。该网页是单个实体。试图从其他地方控制它的一部分是愚蠢的事

想象一下,一个初级web开发人员在一个页面上创建一个登录表单,页面上有广告或其他脚本,可能会嗅探密码?这难道不是网络安全的本质吗?为什么有人在谈论这个

“小心信任第三方脚本”并没有得到应有的重视。谢天谢地,大多数广告提供商和CDN托管库都是由相当值得信赖的人提供的


你知道一个简单的方法来克服缺少访问控制的问题吗

  • 配置服务器,使其不会丢失
  • 改用JSONP
  • 使用未被同源策略阻止的代理取回数据(您将无法获得浏览器可能发送的任何凭据,因为Alice与Bob有帐户)

我认为跨源ajax调用的责任完全在于客户端而不是服务器。服务器如何知道请求是否跨域?为什么页面可以向邪恶的服务器发出请求,但却无法请求有人忘记放置
访问控制允许源站
标题的服务器?“即使服务器想要限制来自其他域的连接,使用HTTP协议的功能也不可能做到这一点。我建议使用令牌。”如果您可以AJAX请求任意跨域内容,您就可以获得这些令牌。“CORS是服务器告诉浏览器它可以放松其正常安全性,因为数据不需要那种级别的保护”-这会将所有内容放在其位置上。感谢您的明确解释据我所知,尝试从Malory的网站向Bob的网站发出请求,使用
技术不会破坏安全性,因为