【问题标题】:The concept of CORS and should I enforce an Origin header?CORS 的概念,我应该强制执行 Origin 标头吗?
【发布时间】:2013-01-31 16:11:15
【问题描述】:

据我了解CORS 无法以您可以真正确定来电者是谁的方式完全保护您。因为调用者可以发送他想要的任何 ORIGIN 标头。实际上,我在某处读到您无法通过 javascript 设置原始标头,因为它是受限制的标头 - 但我不太确定。无论如何..如果您要实现自己的 HttpClient ,您可以轻松伪造您的原始标头,从而使用您不应该使用的服务。

其次,如果没有指定 Origin 标头,请求也可以正常工作。例如,我使用 Google Chrome 的 Postman Extension,它不发送任何原始标头。事实上,如果您尝试手动添加一个,它不会通过网络发送它。

因此...

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

    • 您好,lapsus,您对此有满意的答复吗?
    • @Sam: The same-origin policy is intended to reduce the risks of XSS attacks, this attack mostly happens on browsers, not likely to happen in HttpClient (or any other server side clients)

    标签: javascript web-services api rest cors


    【解决方案1】:

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

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

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

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

    摘自此book

    【讨论】:

      【解决方案2】:

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

      CORS 不能替换正确的身份验证;所做的只是防止浏览器充当confused deputy 反对您现有的身份验证方案。

      【讨论】:

      • 这是同源策略的限制。当服务器同意交易时,CORS 是一种放宽对指定资源的限制(例如,它只能允许额外访问)的方法。
      猜你喜欢
      • 1970-01-01
      • 2013-04-05
      • 2014-03-23
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      相关资源
      最近更新 更多