我想为在Apache 2.4上运行的Joomla网站设置一个内容安全策略头。
在h5bp中使用这个configuration并设置Header set Content-Security-Policy "script-src 'self'; object-src 'self'" src'self Header set Content-Security-Policy "script-src 'self'; object-src 'self'" src'self Header set Content-Security-Policy "script-src 'self'; object-src 'self'"为我提供了一个空白页面,用于loginwww.example.com/administrator/的Joomlalogin页面。 我怎样才能使用这个政策,并仍然login?
检查控制台,错误消息是:
内容安全策略:该页面的设置阻止了自我加载资源(“script-src http://www.example.com ”)。
pipe理员页面完全由example.com提供,没有第三方内容。 除了策略设置的login页面上的空白页面之外,该网站完美地工作。 检查/pipe理员页面的源代码,它看起来是完全普通的,除了JS没有运行。 完整页面源的副本在这里 。
因为我将example.com列入了“script-src'self'; object-src'self'”我希望这个页面可以呈现,但我明显错过了一些东西。
我现在重新testing了一个新的VPS和没有定制的Joomla干净安装。 设置内容安全策略并重新启动Apache会立即重现问题 – 浏览器中出现伴随控制台错误的完全空白pipe理页面,抱怨阻止资源加载的策略。 改变"script-src 'self' src'self "script-src 'IP:AD:DR:ESS' src'example.com "script-src 'example.com'或"script-src 'IP:AD:DR:ESS' src'IP "script-src 'IP:AD:DR:ESS'不会帮助,所有的脚本都会被封锁。
任何想法如何得到这个工作或进一步排除故障?
在查看源代码后,看起来错误信息是错误的和误导的。 看起来导致你的问题是有几个内嵌的JavaScript元素。 换句话说,你所定义的政策允许这样的内容:
<script src="/media/myjsfile.js"></script>
但不是这样的:
<script>function myJsFunction()</script>
为了允许内联JavaScript( 不推荐使用CSP ),您需要修改您的策略,如下所示:
script-src 'self' 'unsafe-inline'
或者,您可以重构代码以不使用内联JS,或利用nonce属性 。 请记住,所有浏览器都不支持nonce属性(它是Content Security Policy的最新规范的一部分)。 据我所知,目前只在Chrome中支持。