阻止对另一个域的请求?

Posted

技术标签:

【中文标题】阻止对另一个域的请求?【英文标题】:Prevent request to another domain? 【发布时间】:2020-06-09 21:56:06 【问题描述】:

我想通过不允许我的页面上的任何内容将 XHR/XMLHttpRequest(或其他?)请求发送到 托管页面的域之外的其他域,从而在管理上防止一整类 XSS 攻击。这可能吗?

我以为我可以用 Cross-Origin Resource Sharing (CORS) 做到这一点,但似乎我错了。如果 domain-a.com 上托管的页面尝试向 domain-b.com 发出 XHR 请求,则可以在 domain-b.com 页面上使用 CORS 来控制是否允许这样做。

因此,如果 domain-a.com 页面上的某些内容尝试向 hackers-r-us.com 发出 XHR 请求,只要hackers-r-us.com 设置适当的 CORS 标头,该请求就会被允许。

但是我可以在 domain-a.com 的页面上设置什么来禁止对其他域(例如 hackers-r-us.com)的请求,而不管hackers-r-us.com 上的 CORS 标头如何?

【问题讨论】:

【参考方案1】:

Content Security Policy (CSP) — 特别是 connect-src CSP 指令。

CSP 指令使用Content-Security-Policy HTTP 标头指定,并由浏览器强制执行。指定connect-src 指令的标头的最简单示例是:

Content-Security-Policy: connect-src 'self';

如果您在https://example.com/foo/ 提供文档,浏览器会阻止文档中的任何前端代码向其自身以外的任何来源('self')发出请求;即,浏览器会将允许的请求限制为仅以 https://example.com 开头的 URL。

https://developer.mozilla.org/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src 有更多详细信息和示例。 https://w3c.github.io/webappsec-csp/#directive-connect-src 是定义浏览器要求的实际规范部分;该部分也有一些示例。

【讨论】:

以上是关于阻止对另一个域的请求?的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 扩展:阻止来自外部域的内容被加载到特定域的页面中

Firebase 云函数对另一个 Firebase 云函数的 http 请求

浏览器同源策略深入

同源策略

浏览器跨域

如何解决跨域问题