[ISO 27001] 其它 Http Headers 相關議題

ISO 27001 這一系列的文章,是在記錄被弱點掃描報告列出的問題修正。

受影響的條款

12.5.1 Installation of soft ware on operational systems

  • Content Security Policy (CSP) not implemented

  • Permissions-Policy header not implemented

  • HTTP Strict Transport Security (HSTS) not implemented

檢測網站設定

下圖是尚未改善前,使用 Security Headers 網站 來進行檢測的結果。


Content-Security-Policy 解法

  • 用途,允許站點管理員控制用戶代理能夠指定的頁面加載哪些資源。除了極少數例外情況,設置的策略主要涉及指定服務器的源和腳本結束點。這將有助於防止跨站腳本攻擊(XSS),底下為 NetCore 範例。
    public static void UseApi(this IApplicationBuilder app, IConfiguration configuration)
    {
        app.Use(async (context, next) =>
        {
            // 取得 Content-Security-Policy 參數
            // default-src 'self'; script-src 'self'; style-src 'self'; font-src 'self'; img-src 'self'; frame-src 'self';
            var config = configuration.GetConfig();
    
            if (!string.IsNullOrEmpty(config.ContentSecurityPolicy))
                context.Response.Headers.Add("Content-Security-Policy", config.ContentSecurityPolicy);
    
            await next();
        });
    
        app.UseStaticFiles();
    }
  • web.config 的解法。
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.webServer> 
            <httpProtocol>
                <customHeaders>
                    <add name="Content-Security-Policy" value="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline' ; font-src 'self' data:; img-src 'self'; frame-src 'self';" />
                    <!--
                    若有使用到外部字形,使用 JavaScript 載入的話,也可參考底下的寫法
                    <add name="Content-Security-Policy" value="default-src 'self'; script-src 'self'; style-src-elem 'self' 'unsafe-inline' https://fonts.googleapis.com; style-src 'self' 'unsafe-inline'; font-src 'self' data:; img-src 'self'; frame-src 'self';" />
                    -->
                </customHeaders>
            </httpProtocol>
        </system.webServer>
    </configuration>
    


X-Frame-Options 解法

用途,避免自己的網站被其他釣魚網站藉由 IFrame 的方式鑲嵌誘騙使用者看似點擊自己的網站,實則是被導向惡意的連結。設定後,其他的網頁在瀏覽器的渲染上會無法以 IFrame 的方式加載自己的網站,web.config 新增設定。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer> 
        <httpProtocol>
            <customHeaders>
                <add name="X-Frame-Options" value="DENY" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>


X-Content-Type-Options 解法

用途,要求使用者端 (Client) 要遵照伺服器端 Content-Type MIME 設定,不要由瀏覽器自行判斷 MIME 類型,web.config 新增設定。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer> 
        <httpProtocol>
            <customHeaders>
                <add name="X-Content-Type-Options" value="nosniff" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>


HTTP Strict Transport Security (HSTS) 解法

用途,強制瀏覽器只能使用安全的 HTTPS 協定跟網站進行連線,而設定值說明如下。

  • max-age=31536000(一年) 代表秒數。
  • includeSubDomains 代表網域或他的子網域。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer> 
        <httpProtocol>
            <customHeaders>
                <add name="Strict-Transport-Security" value="max-age=15552000; includeSubDomains; preload" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>


Permissions-Policy 解法

用途,允許一個站點開啟或者禁止一些瀏覽器屬性和 API,來更好的確保站點的安全性和隱私性。有點類似內容安全策略,但是它控制的是瀏覽器的特徵而不是安全行為,web.config 設定如下(參考 Facebook 的設定)。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer> 
        <httpProtocol>
            <customHeaders>
                <add name="Permissions-Policy" value="accelerometer=(), ambient-light-sensor=(), bluetooth=(), camera=(self), gyroscope=(), hid=(), idle-detection=(), magnetometer=(), microphone=(self), midi=(), payment=(), screen-wake-lock=(), serial=(), usb=()" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>


Referrer-Policy 解法

用途,用於限制 Referer 送出過多的資訊,web.config 設定如下。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer> 
        <httpProtocol>
            <customHeaders>
                <add name="Referrer-Policy" value="strict-origin-when-cross-origin" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>


參考網站

HTTP Headers 的資安議題 (1)

Content-Security-Policy - HTTP Headers 的資安議題 (2)

不識廬山真面目:Clickjacking 點擊劫持攻擊

簡單弄懂同源政策 (Same Origin Policy) 與跨網域 (CORS)

ASP.NET Web.config & Http Headers 安全設定大全

CSP Evaluator CSP Evaluator

留言