[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>
參考網站
Content-Security-Policy - HTTP Headers 的資安議題 (2)
簡單弄懂同源政策 (Same Origin Policy) 與跨網域 (CORS)
留言
張貼留言
您好,我是 Lawrence,這裡是我的開發筆記的網誌,如果你對我的文章有任何疑問或者有錯誤的話,歡迎留言讓我知道。