阻止跨域XHR或在源/源处获取调用

时间:2019-04-13 23:14:20

标签: javascript cors xmlhttprequest fetch-api

让我们考虑以下情况:

  • 用户在支持https://foo.com/index.html的现代浏览器之一中加载CORS
  • index.html通过https://bar.com/script.js标签从script加载JavaScript。
  • 考虑一种假设情况,其中该script.js从未被缓存,并且script.js的内容已更改。
  • script.jsXHR发出https://baz.com请求
  • https://baz.com已启用Access-Control-Allow-Credentials: *,因此XHR制作的script.js通过了。
  • 重要的用户信息现在可以传递到https://baz.com,这是安全隐患。

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

我想知道https://foo.com/index.html是否有一种方法可以指定XHR允许的域名列表,以使上述情况无法实现。

高度赞赏任何指针。

[已更新]

I guess I have found the answer to my question.

感谢您的体贴

最好!

2 个答案:

答案 0 :(得分:4)

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

使用connect-src标头Content-Security-Policy的{​​{1}}指令可以限制https://foo.com/XHR调用以及fetch,{{1} },WebSocket到所需的域。

EventSource

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

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

答案 1 :(得分:0)

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

如果resultc1 c2 c3 c4 c5 74 22 98 223 wq 87 675 784 321 iu 31 92 84 865 wq 获取数据,则bar.com/script.js应该具有CORS限制。