我想为在 Apache 2.4 上运行的 Joomla 网站设置内容安全策略标头。
使用h5bp 中的此配置和设置Header set Content-Security-Policy "script-src 'self'; object-src 'self'"
为我在 www.example.com/administrator/ 上的 Joomla 登录页面提供了一个空白页面。我怎样才能使用此策略并仍然登录?
检查控制台,错误信息是:
内容安全策略:页面的设置阻止了自身资源的加载(“script-src http://www.example.com ”)。
管理员页面完全来自 example.com,没有第三方内容。除了设置了策略的登录页面上的空白页面外,该站点运行良好。检查 /administrator 页面源,除了没有运行 JS 之外,它看起来很普通。完整页面源代码的副本在此处。
因为我已将 example.com 列入白名单,其中包含“script-src 'self'; object-src 'self'”,所以我希望页面会呈现,但我显然遗漏了一些东西。
我现在用一个新的 VPS 重新测试了这个,并且干净地安装了 Joomla,没有自定义。设置内容安全策略并重新启动 Apache 会立即重现该问题 - 完全空白的管理页面,伴随着浏览器中的控制台错误,抱怨该策略阻止了资源的加载。更改"script-src 'self'
为"script-src 'example.com'
或"script-src 'IP:AD:DR:ESS'
无济于事,所有脚本都被阻止,句号。
知道如何使其正常工作或进一步排除故障吗?
查看源代码后,似乎错误消息是错误的和误导性的。导致您的问题的原因似乎是有几个内联 JavaScript 元素。换句话说,您定义的策略允许这样的内容:
但不是这样:
为了允许内联 JavaScript(不推荐,因为这违背了使用 CSP 的目的),您需要将您的策略修改为:
或者,您可以重构代码以不使用内联 JS,或利用nonce 属性。请记住,当前并非所有浏览器都支持 nonce 属性(它是内容安全策略最新规范的一部分)。据我所知,它目前仅在 Chrome 中受支持。