內容安全策略(Content Security Policy,簡稱 CSP)是一種工具,允許開發人員指定在通過 Web 瀏覽器訪問 Storefront 頁面時允許加載哪些位置和哪些類型的資源。
可以使用內容安全策略來鎖定店面應用程序,並降低內容注入漏洞的風險,例如跨站點腳本 (XSS)、代碼注入和點擊劫持攻擊(clickjacking),以及降低您的店面應用程序執行的權限。
Target Policy
指令可以使用 HTTP 響應標頭(服務器可以發送多個具有給定資源表示的 CSP HTTP 標頭字段,並且服務器可以發送具有相同資源或不同資源的不同表示的不同 CSP 標頭字段值)或 HTML Meta 標記,下面的 HTTP 標頭由規範定義:
- Content-Security-Policy :由 W3C 規範定義為標準標頭,由 Chrome 25 及更高版本、Firefox 23 及更高版本、Opera 19 及更高版本使用。
- X-Content-Security-Policy :Firefox 直到版本 23 和 Internet Explorer 版本 10(部分實現內容安全策略)使用。
- X-WebKit-CSP : Chrome 使用直到版本 25
default-src :為所有資源類型定義加載策略,以防未定義資源類型專用指令(回退),
script-src :定義受保護資源可以執行的腳本,
csp 是一個 W3C 規範,提供了指示客户端瀏覽器從哪個位置和/或允許加載哪種類型的資源的可能性。 為了定義加載行為,CSP 規範使用“指令”,其中指令定義目標資源類型的加載行為。
在 Content-Security-Policy 安全標頭中,可以指定定義目標資源類型的加載行為的指令。 以下是推薦的指令和相應的目標:
default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self'
支持的指令有:
- default-src :為所有資源類型定義加載策略,以防未定義資源類型專用指令(回退),
- script-src :定義受保護資源可以執行的腳本。
在 Backoffice 裏的設置
除了 SAP Commerce Platform 提供的安全機制外,Backoffice Framework 還提供額外的安全功能來確保 Storefront 應用的安全性。
Backoffice Framework 中的安全標頭可以準確地告訴您的瀏覽器在處理您網站的內容和數據時的行為方式。
我們確保在 Backoffice Framework 應用程序上下文中應用安全標頭,例如,與 /backoffice/ 路徑一起應用。 來自 /backoffice/ 以外的資源的響應不一定具有這些標頭。 在與 Backoffice Framework 的網絡通信中,每個響應都有以下標頭:
- Header Content-Security-Policy (CSP): default-src 'self'; script-src 'self'' 'unsafe-inline' 'unsafe-eval'; connect-src 'self''; img-src 'self' data:; style-src 'self' 'unsafe-inline'; font-src 'self'', 設置要在網站上加載的內容的批准來源,支持例如圖像、HTML 框架和音頻文件。可以預防 XSS, code injection 和 clickjacking
- Header X-XSS-Protection:1; mode=block,當檢測到反射 XSS 時阻止頁面加載。 舊類型的瀏覽器最需要它。 值 1 啓用 XSS 過濾。 使用其他值時,頁面不會被清理。 添加值塊時,不會呈現頁面。 當設置值報告
reporting URI時,頁面會被清理併發送違規報告。可以預防 Compromising cookies, tokens, and XSS such as JavaScript Keylogger - Header Strict-Transport-Security (HSTS):max-age=31536000; includeSubDomains,自動將 http 鏈接轉為 https,當連接的安全性無法保證時,例如 TLS 證書不可信時,不允許用户訪問 Web 應用程序並返回錯誤。可以預防 Protocol downgrade attacks, cookies hijacking.
- Header X-Frame-Options: SAMEORIGIN. DENY 設置不允許在任何地方顯示頁面,即使在同一頁面上也不允許。SAMEORIGIN 允許將頁面嵌入到提供該頁面的站點的框架中。可以預防 Clikjacking, and embedding a page into other pages.
可以通過更改 project.properties 文件來覆蓋默認值,從而減少限制:
#security headers
backoffice.response.header.X-Frame-Options=SAMEORIGIN
backoffice.response.header.Strict-Transport-Security=max-age=31536000; includeSubDomains
backoffice.response.header.X-XSS-Protection=1; mode=block
backoffice.response.header.X-Content-Type-Options=nosniff
backoffice.response.header.Content-Security-Policy=default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src 'self'; img-src 'self' data: ; style-src 'self' 'unsafe-inline'; font-src 'self'