我可以使用 CSP 来限制对 https: 和“self”的请求吗?

问题描述 投票:0回答:1

我最初在我的 CSP 标头中包含此内容:

default-src 'self';
,它将源仅限于我的域,但它没有提及方案/协议。据我所知,如果页面本身是通过 http 加载的,这将允许通过 http 加载源代码。我正在使用 HSTS 和 CDN 重定向来尝试将所有流量保持在 https 上,但无论如何我想掩盖这种情况。 (事实上,我正在尝试让这个标题检查器给我所有绿色勾号。)编辑:srcclr在使用
'self'
时会很高兴地给我所有绿色勾号。我只是需要修正一些错别字。

无论如何,我尝试将 CSP 指令更改为

default-src https: 'self';
,但添加该方案似乎允许从 any 域加载资源,只要它通过 https 即可。即,如果任一规则(https 或“self”)匹配,则允许该请求。我通过在 chrome 开发工具中使用 URL 来测试这一点。

有没有办法表示:

  1. 所有资源均应通过https加载;和
  2. 资源只能来自原始域吗?

类似于

default-src https://'self';
,但我认为这不是有效的,是吗?

一种解决方案是对域名进行硬编码,但如果可能的话我想使用

'self'

security http https http-headers content-security-policy
1个回答
4
投票

根据 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/Sources

'self'
内容源关键字:

指受保护文档的服务来源,包括相同的 URL 方案和端口号。

如果您通过 https 提供网页,则 self 仅允许对同一域的 https 请求。

CSP2 规范 http://www.w3.org/TR/CSP2/#match-source-expression 也说了同样的事情:

如果源表达式与 'self' 不区分大小写匹配(包括引号),则:

如果 url 的来源与受保护资源的 URL 的来源匹配,则返回确实匹配。

© www.soinside.com 2019 - 2024. All rights reserved.