前言
- 在 [1] 這篇看到他用的 nginx security headers。於是也分別記錄一下。
說明
Security Headers in Nginx:
|
|
分別解釋如下。
HSTS (Strict-Transport-Security)
- 要求瀏覽器只能透過 HTTPS 連線,並且不允許使用不安全的連線。wiki [2]
- 只要第一次透過 HTTPS 連線到這個網站,之後的連線都會強制使用 HTTPS,即使指定
http://
也一樣。
X-Frame-Options: DENY
- 讓瀏覽器不要渲染以下標籤裡面的 page:
<frame>
,<iframe>
,<embed>
或<object>
。 - 這樣可以避免 click jacking (點擊劫持) 攻擊 [3] — 你以為點擊的是 A 功能,但實際上是做了 B 功能。
X-Content-Type-Options nosniff
- 防止瀏覽器對 response 的 MIME type 進行猜測。
MIMIME type sniffing:是一種瀏覽器「用來確定文件實際 MIME 類型」的技術,且不管伺服器聲稱的 MIME 類型是什麼。
nosniff
代表瀏覽器必須採用伺服器聲稱的 MIME 類型;如果不這樣做,攻擊者可以利用這個漏洞來進行 MIME type confusion 攻擊 [4]。
例如,把有害的 HTML/JS 偽裝成一個圖片。
CSP (Content-Security-Policy)
- 基本上就是條列
source
的白名單 [5],例如default-src 'self'
:只允許自己的網站script-src 'self' www.google-analytics.com
:只允許自己的網站和 google analytics 的 JavaScriptimg-src 'self' www.google.com
:只允許自己的網站和 google
目前我自己開發的功能還沒分這麼複雜,所以學原作者,主要條列 default-src
就好。
X-XSS-Protection
X-XSS-Protection: 1; mode=block
的意思是
1
: 啟用 XSS filtermode=block
: 如果有 XSS 攻擊,就會停止渲染這個頁面。
不過這只能防止 reflected XSS attacks,無法處理 DOM-based XSS attacks。
另外是有一些討論 [6] 認為不要加上這個 header,單純用 CSP 利大於弊。
Note
-
reflected XSS attacks (讓後端渲染惡意 HTML):
- 攻擊者製作一個修改過、帶有
<script>
tag 的 URL (如同 injection 的做法) - 攻擊者誘使 user (例如騙他點擊一個連結) 的瀏覽器發送這個 URL 給 server
- server (如果沒有仔細處理) 就會把這個 URL 的內容渲染後,回傳給 user
- user 收到後,就會執行這個 script
- 攻擊者製作一個修改過、帶有
-
DOM-based XSS attacks (純前端渲染惡意 HTML):
- 攻擊者製作一個修改過、帶有
<script>
tag 的 URL (如同 injection 的做法) - 如果前端存在漏洞,這個 URL 帶上的參數 (
<script>xxx</script>
) 會被當作 HTML 來渲染 - 攻擊者誘使 user (例如騙他點擊一個連結) 的瀏覽器處理這個 URL
- user 下載到的 HTML 中會帶上攻擊者的 script,並且執行
- 攻擊者製作一個修改過、帶有
Referrer-Policy “origin”
在瀏覽器切換網站時,把 Header Referrer
設定為 origin
,這樣就不會把完整的 URL 傳給下一個網站。
例如 Referrer
原本是
https://www.example.com/search?q=hello&token=123123123
如果有設定成 origin
,就會變成
https://www.example.com
這樣另一個網站就無法「藉由 Referrer
的內容」,得知你的 query string 或是 token。
REF
- https://serverfault.com/questions/874936/adding-hsts-to-nginx-config
- https://zh.wikipedia.org/zh-tw/HTTP%E4%B8%A5%E6%A0%BC%E4%BC%A0%E8%BE%93%E5%AE%89%E5%85%A8
- https://ithelp.ithome.com.tw/articles/10329128
- https://www.compassitc.com/blog/mime-sniffing-what-is-it-what-are-the-security-implications
- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
- https://security.stackexchange.com/questions/253924/is-it-better-to-disable-x-xss-protection-header-or-set-the-header-as-x-xss-prote