我从来没有听说过一个服务器试图限制来自外部网页的访问。
同源策略是浏览器而不是服务器施加的限制。
CORS是服务器告诉浏览器它可以放松其正常的安全性,因为数据不需要这个级别的保护。
即使服务器要限制从其他域的连接,这是不可能做到这一点使用HTTP协议的能力。
这就是为什么HTTP协议不用于此目的。
我建议使用令牌。
使用nonce防止CSRF解决了另一个问题。
这是一个相对昂贵的解决方案,只有在请求的副作用可能有问题时(例如“发表新评论”),而不是将数据传回到另一个运行的JavaScript现场。
您不能使用它们代替相同原点策略来防止跨源读取数据,因为(没有相同原点策略)攻击性网站将能够读取令牌。
什么用堵的XMLHttpRequest,而你仍然可以使用JSONP的?
除非服务器使用JSONP提供数据,否则不能使用JSONP。
提供在JSONP数据,并使用CORS授予权限访问的资源是两种不同的方式,服务器可以让浏览器访问通常由同源策略保护的数据。
JSONP是一个黑客攻击。 CORS后来出现,并且更加灵活(因为它可以允许访问任何类型的数据,响应除GET以外的请求方法,并允许添加自定义HTTP头)。
你能解释这是为什么那么做?
默认策略是“No Access”,因为浏览器无法知道请求的数据是否是公开的。
考虑这种情况:
Alice在Bob的网站上有一个帐户。该帐户受密码保护,并具有Alice和Bob之间应保密的信息(例如银行记录或考试结果)。
Mallory有另一个网站。它使用Ajax尝试访问Bob的网站。
没有同源策略,爱丽丝可能(而在Bob的网站登录)参观马洛里的网站。如果没有Alice的知识或许可,Mallory的网站会将JavaScript发送到Alice的浏览器,该浏览器使用Ajax从Bob网站获取数据。由于它来自Alice的浏览器,因此Alice的所有私人信息都被提供给JavaScript。 JavaScript然后将其发送给Mallory。
这显然不是一件好事。
相同来源策略可以防止这种情况发生。
如果Bob,作为运行网站的人,决定该信息不是保密的,可以公开分享,那么他就可以利用CORS或JSONP提供给其他网站上运行的JavaScript访问它。
你知道一种方法来阻止网页上的任何跨域请求。
号的网页是一个单独的实体。试图从其他部分监控它的一部分是愚蠢的事情。
想象一下初级web开发人员在页面上创建登录表单,该页面上有广告或其他脚本可能会嗅探密码?这不是网络安全的本质吗?为什么有人在谈论这个?
“小心信任第三方脚本”是没有得到应有的提及。值得庆幸的是,大多数广告提供商和CDN托管的图书馆都是由合理可靠的人员提供的。
你知道克服缺少访问控制允许来源
- 配置服务器,以便没有丢失它的问题的简单方法。
- 使用JSONP代替
- 使用未被相同原始策略阻止的代理来取回数据(您不会获得浏览器可能发送的任何凭据,因为Alice拥有Bob的帐户)。
我相信交叉来源的ajax调用的责任完全奠定了客户端而不是服务器。服务器如何知道请求是否跨域?为什么页面可以向邪恶的服务器发出请求,却无法请求某个人忘记放置'Access-Control-Allow-Origin'头部的服务器? – Dan 2014-12-07 20:54:41
“即使服务器想要限制来自其他域的连接,使用HTTP协议的功能也无法做到这一点,我建议使用令牌。”如果你可以让AJAX请求任意的跨域内容,你可以获得这些令牌。 – 2014-12-07 21:00:14