【问题标题】:Block cross domain XHR or fetch call at origination/source阻止跨域 XHR 或在起源/源处获取调用
【发布时间】:2019-09-04 08:12:49
【问题描述】:

让我们考虑以下场景:

  • 用户在允许CORS 的现代浏览器之一中加载https://foo.com/index.html
  • index.html 通过 script 标记从 https://bar.com/script.js 加载 javascript。
  • 考虑一个假设情况,即此script.js 从未被缓存并且script.js 的内容已更改。
  • script.jshttps://baz.com 发出 XHR 请求
  • https://baz.com 已启用 Access-Control-Allow-Credentials: *,因此由 script.js 制作的 XHR 会通过。
  • 重要的用户信息现在可以传递给https://baz.com,这是一个安全风险。

CORS 之前,XHR 调用严格遵循同源策略,因此浏览器不允许从https://foo.com 调用https://baz.com

我想知道https://foo.com/index.html 是否有办法指定XHR 允许的域名列表,这样就不会出现上述情况。

高度赞赏任何指针。

[更新]

I guess I have found the answer to my question.

谢谢你的体贴????

最好的!

【问题讨论】:

    标签: javascript xmlhttprequest cross-domain fetch-api content-security-policy


    【解决方案1】:

    我想我找到了问题的答案。

    使用Content-Security-Policy Header https://foo.com/connect-src 指令可以将XHRfetch 调用与WebSocketEventSource<a> ping 一起限制到所需的域。

    Content-Security-Policy: connect-src <source> <source>;
    

    更多信息https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src

    我曾经想过删除我的问题,但像我这样的其他人可以受益。

    【讨论】:

    • 我要发布一个关于如何重载 XMLHttpRequest 和 fetch() 来创建拦截器的答案......这要简单得多!
    【解决方案2】:

    CORS 阻塞是在服务器端完成的,其中响应标头设置为允许或不允许来自某些来源的请求。

    如果bar.com/script.jsbaz.com获取数据,那么baz.com应该有CORS限制。

    【讨论】:

      猜你喜欢
      • 2014-02-01
      • 2016-04-20
      • 2019-11-22
      • 2016-07-19
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 2021-04-04
      • 2014-10-17
      相关资源
      最近更新 更多