設置內容安全策略是否與 Joomla 的管理頁面不兼容?
我想為在 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 元素。換句話說,您定義的策略允許這樣的內容:
<script src="/media/myjsfile.js"></script>
但不是這樣:
<script>function myJsFunction()</script>
為了允許內聯 JavaScript(不推薦,因為這違背了使用 CSP 的目的),您需要將您的策略修改為:
script-src 'self' 'unsafe-inline'
或者,您可以重構程式碼以不使用內聯 JS,或利用nonce 屬性。請記住,目前並非所有瀏覽器都支持 nonce 屬性(它是最新的內容安全策略規範的一部分)。據我所知,它目前僅在 Chrome 中受支持。