Situation
因為公司有和 2330 合作,2330 偶爾會稽核公司底下的外部網站。
這次輪到小弟負責維護的網站被稽核,抓出兩項安全性缺失分別為 CSP(Content Security Policy) 和 HSTS(HTTP Strict Transport Security)。
關於這兩項安全性問題可以從 https://www.ithome.com.tw/voice/130302 或自行Google看看。
簡單的說這兩項都和 HTTP 的 Header 有關,而透過強化 HTTP Header 設定可以有效的提升網站安全性。
Action
首先我們必須找出如何偵測網站的安全性,可以很簡單的在 https://securityheaders.com/ 輸入要測試的網址來檢測。
以下是檢測網站修改前的狀態
如上圖可以看到 Strict-Transport-Security / Content-Security-Policy / X-Frame-Options / X-Content-Type-Options / Referrer-Policy / Permissions-Policy 都是不合格的。
如果你使用的剛好是 ASP.NET 的 Web Form,可以很簡單的透過設定 web.config 來強化安全性。
請打開 web.config 並在 <customHeaders></customHeaders> 輸入下列設定
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="no-cache" />
<!-- Try your URL in this Scen WebSite : https://securityheaders.com/ -->
<!-- Good Solution ref https://blog.elmah.io/improving-security-in-asp-net-mvc-using-custom-headers/ -->
<!-- 1. Enable HSTS (HTTP Strict Transport Security) -->
<!-- ref : https://sdwh.dev/posts/2020/10/Cyber-Security-Web-Config-Configuration/#Contentt-Security-Policy-CSP -->
<!-- Hide Server Information -->
<remove name="X-Powered-By" />
<remove name="X-AspNetMvc-Version" />
<!-- Referrer Policy -->
<add name="Referrer-Policy" value="No-referrer-when-downgrade" />
<!-- Anti-Clickjacking-->
<add name="X-Frame-Options" value="DENY" />
<!-- Anti-XSS for IE -->
<add name="X-Xss-Protection" value="1; mode=block" />
<!-- HSTS -->
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" />
<!-- 1. Enable HSTS (HTTP Strict Transport Security) -->
<!-- 2. Enable Http Header Content Security Policy(CSP) -->
<!-- ref :https://stackoverflow.com/questions/35851651/content-security-policy-in-asp-net-webforms -->
<add name="Content-Security-Policy" value="default-src 'self'" />
<!-- 2. Enable Http Header Content Security Policy(CSP) -->
<!-- 3. Enable X-Content-Type-Options -->
<!-- ref : https://stackoverflow.com/questions/18337630/what-is-x-content-type-options-nosniff -->
<remove name="X-Content-Type-Options"/>
<add name="X-Content-Type-Options" value="nosniff"/>
<!-- 3. Enable X-Content-Type-Options -->
<!-- 4. Enable Permissions Policy -->
<!-- ref https://blog.elmah.io/improving-security-in-asp-net-mvc-using-custom-headers/ -->
<add name="Permissions-Policy" value="accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()" />
<!-- 4. Enable Permissions Policy -->
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
Result
更改完成後再到 https://securityheaders.com/ 重新檢測,結果如下,完成 Header 的安全性設定