CSP,Content Security Policy(內容安全策略)的設定

 

CSP(Content Security Policy,內容安全策略)
限制載入的資源(js,css,字體,圖片)只能在白名單中,可能是你同一站台域名或是特定網域、其他來源。是可以在前端跟後端程式沒有特別去做XSS防禦機制時候,仍有透過此header配置而讓XSS相關風險能得到更全域性地保障,有時應用程式碼中還沒實作某程度的XSS修補,就能再透過它配置來讓風險可被克服。

是一種電腦安全標準、網頁安全機制,目的在於防禦 跨網站指令碼攻擊(Cross-Site Scripting, XSS)、資源數據盜取(Cross-Site Data Theft, XSD)和網頁樣式置換…等代碼注入攻擊。阻止惡意內容在受到信任的網頁環境中執行,這個 CSP 內容安全策略標準,是 W3C 網路應用安全工作群組的候選推薦標準,目前也被現代網頁瀏覽器廣泛支援中。

實質就是白名單制度,開發者明確告訴用戶端,哪些外部資源可以載入和執行,等同于提供白名單。它的實現和執行全部由流覽器完成,開發者只需提供配置。

透過在 http header 響應頭中添加指令,限制瀏覽器載入和執行特定來源的資源,這些資源可能是 JavaScript、CSS、字體、圖像、影片或任何嵌入的內容,它會告訴瀏覽器只能允許載入特定來源的資源,並且阻止載入外部或未受信任的資源,同時還可限制內嵌腳本的執行,以防止 駭客攻擊者可能會透過任何形式的漏洞在網站中安插惡意的程式碼,也就是XSS 攻擊。

因此這時就需要使用 CSP 規範,告知瀏覽器發出的要求位置是否受到信任,並且積極阻擋非預期的對外連線,以加強網站的安全性。




CSP設定指令
由一系列的指令和資料來源所組成,如 'default-src'、'script-src'、'style-src' 等,每個指令都可以用來指定一個或多個資料來源並限制相應的資源載入,資料來源可以是具體的 URL 也可以是特定的關鍵字,如表示當前網站的來源的 'self' 或 允許內連腳本的 'unsafe-inline' 都可以。

Content-Security-Policy: default-src 'self'; script-src 'self' 


(1)在 http header 加入【 Content-Security-Policy: {Policy} 】
此方式是當有不符合安全政策的情況時,瀏覽器就會自動提報錯誤並終止該行為之執行。

(2)在 http header 加入【 Content-Security-Policy-Report-Only: {Policy} 】
此方式是當有不符合安全政策的情況時,瀏覽器就會自動提報錯誤,但會繼續執行該行為不會終止。


怎麼正確的配置 CSP 需要針對需求與資源依賴深思熟慮,避免導致網頁功能受限或錯誤情形。

資源載入限制
如果不設定某個限制選項,就是預設允許任何值。

以下選項限制各類資源的載入。
  • script-src:外部腳本
  • style-src:樣式表
  • img-src:影像
  • media-src:媒體檔案(音訊和視訊)
  • font-src:字體文件
  • object-src:插件(如Flash)
  • child-src:框架
  • frame-ancestors:嵌入的外部資源(如<frame>、<iframe>、<embed>和<applet>)
  • connect-src:HTTP 連線(透過XHR、WebSockets、EventSource等)
  • worker-src:worker劇本
  • manifest-src:manifest 文件
URL 限制(有時,網頁會跟其他URL 發生聯繫,這時也可以加以限制。)
  • frame-ancestors:限制嵌入框架的網頁
  • base-uri:限制<base#href>
  • form-action:限制<form#action>
每個限制選項可以設定以下幾種值,這些值就構成了白名單。
  • 主機名稱:example.org,https://example.com:443
  • 路徑名:example.org/resources/js/
  • 通配符:*.example.org,*://*.example.com:*(表示任意協定、任意子網域、任意連接埠)
  • 協議名:https:、data:
  • 關鍵字'self':目前域名,需要加引號
  • 關鍵字'none':禁止載入任何外部資源,需要加引號
多個值也可以並列,用空格分隔。
Content-Security-Policy: script-src 'self' https://apis.google.com

如果同一個限制選項使用多次,只有第一次會生效。

# 錯誤寫法
script-src https://host1.com; script-src https://host2.com

# 正確寫法
script-src https://host1.com https://host2.com


IIS中的配置




另一種作法是在各頁html上方配置meta
比方我有一段用jquery加入到body的文字段落
jquery引用外部域名的CDN資源
此時若用default self設定那就會造成引用外部資源的都失效




所以要加上unsafe-inline






Ref:

https://cspvalidator.org/#url=https://cspvalidator.org/

https://hackmd.io/@Eotones/BkOX6u5kX


https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy
Content Security Policy (CSP) — 幫你網站列白名單吧
https://medium.com/hannah-lin/content-security-policy-csp-%E5%B9%AB%E4%BD%A0%E7%B6%B2%E7%AB%99%E5%88%97%E7%99%BD%E5%90%8D%E5%96%AE%E5%90%A7-df38c990f63c

XSS 防禦 - CSP script-src 設定
https://blog.darkthread.net/blog/csp-script-src/

快訊/台大教務處網站遭駭 出現「只有一個中國」
https://tw.news.yahoo.com/%E5%BF%AB%E8%A8%8A-%E5%8F%B0%E5%A4%A7%E6%95%99%E5%8B%99%E8%99%95%E7%B6%B2%E7%AB%99%E9%81%AD%E9%A7%AD-%E5%87%BA%E7%8F%BE-%E5%8F%AA%E6%9C%89-%E5%80%8B%E4%B8%AD%E5%9C%8B-133000223.html

[Day27] ASP.NET Core 2 系列 - 網頁內容安全政策 (Content Security Policy)
https://ithelp.ithome.com.tw/articles/10196896

ASP.NET Security Headers
https://rainmakerho.github.io/2020/05/12/2020005/

Content Security Policy 入門教程
https://www.ruanyifeng.com/blog/2016/09/csp.html

CSP是什麼?內容安全策略Content Security Policy|天矽科技網頁設計
https://www.tsg.com.tw/blog-detail10-317-1-content-security-policy.htm

https://www.youtube.com/watch?v=c0Y3sER1beo&ab_channel=CyberSecurityVulnerabilityFixationTechniques

https://www.youtube.com/watch?v=pBKB4wsQK48&ab_channel=GaurAssociates

留言

這個網誌中的熱門文章

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header

經得起原始碼資安弱點掃描的程式設計習慣培養(三)_7.Cross Site Scripting(XSS)_Stored XSS_Reflected XSS All Clients

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題