Content Security Policy
CSP是什麼?內容安全策略Content Security Policy|天矽科技網頁設計
CSP是什麼?
CSP 全名為 Content Security Policy 內容安全策略,它是一種電腦安全標準、網頁安全機制,目的在於防禦 跨網站指令碼攻擊(Cross-Site Scripting, XSS)、資源數據盜取(Cross-Site Data Theft, XSD)和網頁樣式置換…等代碼注入攻擊,阻止惡意內容在受到信任的網頁環境中執行,這個 CSP 內容安全策略標準,是 W3C 網路應用安全工作群組的候選推薦標準,目前也被現代網頁瀏覽器廣泛支援中。
對網頁來說,跨網站指令碼攻擊(XSS) 是最常見的攻擊手法,駭客攻擊者可能會透過任何形式的漏洞在網站中安插惡意的程式碼,因此這時就需要使用 CSP 規範,告知瀏覽器發出的要求位置是否受到信任,並且積極阻擋非預期的對外連線,以加強網站的安全性。
▲攻擊者安插惡意程式碼,讓使用者開啟網站頁面後,cookie 資料就被送回攻擊者主機中(參考資料:iT邦幫忙)
延伸閱讀:SQL注入式攻擊是什麼?認識SQL injection與預防
CSP的做法
Content Security Policy, CSP 的設定方式,是透過在 http header 響應頭中添加指令,限制瀏覽器載入和執行特定來源的資源,這些資源可能是 JavaScript、CSS、字體、圖像、影片或任何嵌入的內容,它會告訴瀏覽器只能允許載入特定來源的資源,並且阻止載入外部或未受信任的資源,同時還可限制內嵌腳本的執行,以防止 XSS 攻擊。
簡單來說,CSP 是瀏覽器提供設定白名單的機制,網站會告訴瀏覽器那些網頁的哪些位置可以連、哪些位置不能連,並且目前大部分的瀏覽器都能支援 CSP。
以近期碰到的問題來舉例,某網站中的內容、樣式及表格等,大多是以外連的方式嵌入網站中,當網站開啟時,就會需要呼叫外部連結的資料才能讓這些樣式內容各司其職的顯示,但後來因為加入了 CSP,進而導致各種以外連嵌入的內容無法使用,導致整體網站需要重新調整才能符合資訊安全,而這個原因就在於 CSP 阻擋了這些來源,防止 XSS 攻擊、提升資安。
CSP設定指令
CSP 的指令,是由一系列的指令和資料來源所組成,如 'default-src'、'script-src'、'style-src' 等,每個指令都可以用來指定一個或多個資料來源並限制相應的資源載入,資料來源可以是具體的 URL 也可以是特定的關鍵字,如表示當前網站的來源的 'self' 或 允許內連腳本的 'unsafe-inline' 都可以。
CSP的設定方式有兩種:
- 在 http header 加入【 Content-Security-Policy: {Policy} 】
此方式是當有不符合安全政策的情況時,瀏覽器就會自動提報錯誤並終止該行為之執行。 - 在 http header 加入【 Content-Security-Policy-Report-Only: {Policy} 】
此方式是當有不符合安全政策的情況時,瀏覽器就會自動提報錯誤,但會繼續執行該行為不會終止。
綜合上述之設定方式與指令資料來源組合舉例,它的樣子就會長成這樣: 【Content-Security-Policy: default-src 'self'; script-src 'self' 】這個CSP指令表示只允許載入同源的資源,並禁止內連腳本的執行。
因此,網站若實施 CSP 則可提高網站對 XSS、XSD 或網頁樣式置換…等代碼注入攻擊,減少網站被滲透和利用的風險(像前陣子台灣政府網站被中國駭客置換整體個頁面就是如此)。
不過,如何正確的配置 CSP 需要仔細的考慮往需求與資源依賴,以避免導致網頁功能受限或錯誤情形(如上方舉例某網站內容大多以外連的方式表現之問題)。
資料來源:
✓ iT邦幫忙|ASP.NET Core 2 系列 - 網頁內容安全政策 (Content Security Policy)
✓ 維基百科|內容安全策略