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 的安全性設定