CORS的概念,我应该强制执行Origin标头吗?

时间:2013-02-15 16:21:53

标签: javascript web-services api rest cors

据我所知 CORS无法确切地保护您的方式,您可以确定调用者 。因为调用者可以发送他想要的任何ORIGIN标题。实际上我读到的地方你不能通过javascript设置原始标题,因为它是一个受限制的标题 - 但我不太确定。无论如何..如果您要实现自己的HttpClient,您可以轻松伪造您的原始标头,从而消耗您不应该使用的服务。

其次 如果未指定Origin标头,则请求也可以 。例如,我使用谷歌Chrome的Postman扩展,它不发送任何原始标题。实际上,如果您尝试手动添加一个,则不会通过网络发送它。

...因此

  • ... 问题1 是:我的应用程序是否应该拒绝没有任何Origin标头的请求?和...
  • ... 问题2 :如何让CORS我的REST服务更安全?

  • 2 个答案:

    答案 0 :(得分:5)

    有些浏览器支持CORS而不支持CORS。 (我们处于CORS的早期阶段,跨浏览器的CORS规范的实现并不一致)。

    • 不支持CORS意味着当浏览器检测到跨源请求时,请求被阻止而不会被发送到服务器。
    • 支持CORS意味着浏览器应用CORS策略:在向服务器发送请求之前附加Origin头,并且在收到响应后,浏览器检查Access-Control-Allow-Origin决定是否放弃响应。

    同源策略旨在降低XSS攻击的风险,这种攻击主要发生在浏览器上,不太可能在HttpClient中发生。 CORS策略用于放宽同源策略,以便如果您是两个站点的所有者,则可以利用此策略允许两个站点之间的通信。

      

    提示支持CORS意味着浏览器必须应用   联系服务器之后的跨源安全策略   获得了响应头,这意味着即使是请求也是如此   响应被丢弃,因为缺少所需的标头或   指定了不同的域。这是一种非常不同的方法   没有实现CORS且只是阻止请求的浏览器,   从不联系服务器。

    从此book

    中提取

    答案 1 :(得分:3)

    CORS的目的是防止(或允许)在不同域上运行的Javascript向您的API发送AJAX请求并使用用户经过身份验证的会话cookie。

    CORS 无法替换正确的身份验证;一切都是为了防止浏览器对现有的身份验证方案充当confused deputy