2015-12-21 108 views
2

我最初在我的CSP头文件中有这个:default-src 'self';,它将源限制在我的域中,但它没有提到方案/协议。从我可以收集的信息来看,如果页面本身通过http加载,这将允许通过http加载源代码。我正在使用HSTS和CDN重定向来尝试保持https上的所有流量,但我仍想覆盖此情况。 (实际上,我试图让this header checker给我所有的绿色滴答。)编辑:当使用'self'时,srcclr会很乐意给所有的绿色滴答。我只需要修复一些错别字。我可以使用CSP将请求限制为https:AND'self'吗?

无论如何,我试图改变CSP指令是default-src https: 'self';,但它似乎加入该计划允许从加载资源的任何域,只要它是通过https。即,如果任何规则(https或'self')匹配,则允许请求。我通过在Chrome开发工具中使用URL来测试这一点。

有没有一种方法来表示:

  1. 所有资源都应该被加载通过https; AND
  2. 资源应该只来自原始域?

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

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

回答

4

https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives,该'self'内容源关键字:

指从受保护的文件被服务,包括相同的URL方案和端口号的由来。

如果您通过HTTPS网页,然后自己只允许HTTPS请求同一个域。

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

如果源表达是不区分大小写匹配“自我”(包括引号),则:

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

+1

对,所以我想不可能说“来自'self''的域,但是这个特定的方案”。如果该页面是在http上提供的,那么按照定义,“self”指的是http。因此,将其解决到https和我自己的域的唯一方法是使用'https:// example.com'。 –

+0

@CamJackson我不明白。你说带CSP的页面使用http?但你说你的域名使用HSTS。 (请注意,对于http-> https的301重定向不需要CSP。)如果您确实使用HSTS,则应该为所有http请求回答301以https,因为新浏览器会自动执行此操作 – Tom

+1

不,我在说* **如果网页是通过http服务的,那么''self''也会指向http,所以唯一总是限制为https的方法,同时也仅限于我的域名,是硬编码'https :// example.com',而不是使用'self''。我认为这是如何运作的?但是,是的,我使用重定向和HSTS将页面加载限制为https,因此使用“self”是更简单和更好的解决方案。大多数情况下,我试图从srcclr获取所有绿色的蜱虫。 (我现在已经完成了,我只需要修复一些错别字) –

相关问题