Http Security Header

Http Security Header內容共有六項:

一、Strict-Transport-Security

簡稱 HSTS(http-Strict-Transport-Security),告知瀏覽器強制啟用 https , max-age 代表強制維持 https 多少時間,一般為一年31536000秒,includeSubDomains包含子網域,若max-age=0,代表disable。

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

二、X-Frame-Options

防止釣魚網站透過iframe來籤入自己的網站,設定值有二種

DENY

表示網頁無論如何都無法被嵌入到 frame 中,即使於相同網域內嵌入也不允許。

SAMEORIGIN

唯有當符合網頁具備相同協定、埠號 (如果有指定) 以及主機位置下,才能被嵌入到 frame 中。

Header always set X-Frame-Options: SAMEORIGIN

三、X-Content-Type-Options

阻止瀏覽器探知檔案的 mime type ( disable Content sniffing )

Header always set X-Content-Type-Options: nosniff

四、Referrer-Policy

referrer是訪問來源網址,會將使用者從哪個網站來的資訊帶到 request 的header,設定值如下:

no-referrer: 不帶 header 。

no-referrer-when-downgrade : https 到 https 的網站可以, https 到 http 的網站則不會帶header。

origin:不帶完整 url ,僅只帶 origin 。

origin-when-cross-origin:同源帶完整 url ,不同源帶 origin 。

same-origin:同源才帶 header 。

strict-origin:同源且 https 到 https 才帶 header , http 就不會帶。

strict-origin-when-cross-origin:同源帶完整 url,不同源帶 origin ,但是必須是 https 到 https 。

unsafe-url:都帶。

Header always set Referrer-Policy: no-referrer

五、X-XSS-Protection

當瀏覽器發現跨站腳本攻擊時,停止加載網頁,設定值有三個。

0 為不啟用 XSS 過濾。

1 為啟用 XSS 過濾,遇到 XSS ,僅刪除不安全的部分,不會block。

1;mode=block 是遇到 XSS ,停止加載頁面。

Header always set X-XSS-Protection: "1;mode=block"

六、Content-Security-Policy

為了防止 XSS , CSP 可以設定來源白名單,只讓信任的來源執行腳本;瀏覽器提供網站設定白名單的機制,網站可以告知瀏覽器,該網頁有哪些位置可以連、哪些位置不能連。

HTTP Header 加入 Content-Security-Policy: {Policy}當有不符合安全政策的情況,瀏覽器就會提報錯誤, 並終止該行為執行。

HTTP Header 加入 Content-Security-Policy-Report-Only: {Policy} 當有不符合安全政策的情況,瀏覽器就會提報錯誤, 但會繼續執行,主要用於測試用,怕網站直接套上 CSP 導致功能不正常。

以 ; 區分多個指令,以空格區分多個白名單位置。

常用的 CSP 指令如下:

default-src 預設所有類型的載入都使用這個規則。

connect-src 載入 Ajax、Web Socket 套用的規則。

font-src 載入字型套用的規則。

frame-src 載入 IFrame 套用的規則。

img-src 載入圖片套用的規則。

media-src 載入影音標籤套用的規則。

object-src 載入非影音標籤物件套用的規則。

script-src載入 JavaScript 套用的規則。

style-src載入 Stylesheets (CSS) 套用的規則。

report-uri當瀏覽器發現 CSP 安全性問題時,就會提報錯誤給 report-uri 指定的網址。若使用 Content-Security-Policy-Report-Only 就需要搭配 report-uri。

每個 CSP 指令可以限制一個或多個能發出 Request 的位置,設定參數如下:

*:(不能加引號) 允許對任何位置發出 Request。 如:default-src *;,允許載入來自任何地方、任何類型的資源。

‘none’: 不允許對任何位置發出 Request。 如:media-src ‘none’;,不允許載入影音標籤。

‘self’: 只允許同網域的位置發出 Request。 如:script-src ‘self’;,只允許載入同網域的 *.js。

URL:指定允許發出 Request 的位置,可搭配 * 使用。如:img-src http://cdn.johnwu.cc https:;,只允許從 http://cdn.johnwu.cc 或其他 HTTPS 的位置載入 *.css。