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

lap*_*sus 8 javascript api rest web-services cors

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

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

因此...

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

  • SLa*_*aks 5

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

    CORS无法替代正确的身份验证;所做的一切都是为了防止浏览器充当您现有身份验证方案的混淆代理人


    Kha*_* TO 5

    有些浏览器支持CORS,但不支持CORS。(我们还处于CORS的初级阶段,跨浏览器的CORS规范的实现不一致)。

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

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

    ?提示支持CORS意味着浏览器在与服务器联系并获得响应标头后必须应用跨域安全策略,这意味着即使由于缺少必需标头或指定标头而丢弃了响应,也将发出请求。不同的域。这与未实现CORS且仅阻止请求,从不联系服务器的浏览器完全不同。

    从这本书中摘录