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。