Nginx 安全性設定
筆者先寫跟 HTTP Header 相關的設定,往後也會談談如何部署 OpenResty + Lua 去做 WAF。
不知道您是否注意過 HTTP Header 中的資訊代表著什麼呢? 筆者以下介紹幾種跟安全性相關的 Header。
不過在介紹第一個 Header 之前,我們要先認識什麼是同源政策 (Same-origin policy)。
什麼是同源政策? (Same-origin policy)
舉例來說,網址是 http://store.example.com/dir/index.html,那下列哪些網址是同源,那些是非同源呢?
網址 | 結果 |
---|---|
http://store.example.com/dir/sub/another.html | 同源 |
http://store.example.com/dir2/other.html | 同源 |
https://store.example.com/secure.html | 協定不同 |
http://store.example.com:8080/dir/etc.html | Port 不同 |
http://news.example.com/dir/other.html | Host 不同 |
X-Frame-Options
用於禁止以 <iframe>
或 <frame>
的方式嵌入網頁。
DENY
禁止任何頁面嵌入至 frame 中,即使是自家網站也不例外SAMEORIGIN
僅當符合同源政策 (Same-origin policy) 時,才能被嵌入到 frame 中ALLOW-FROM uri
僅被允許的 URL 才可嵌入
如果其他網站沒有嵌入此網站頁面的需求,可以選擇 SAMEORIGIN
,防止他人任意嵌入您網站的頁面。
X-Content-Type-Options
這個 Header 最先由微軟在 IE 8 中引進,如果資源的 Content-Type 未被指定,瀏覽器會做 MIME Sniffing 去猜測 MIME Type。例如,攻擊者可以將圖片「加料」,本來應該被解析成圖片的 Request 被解析成 JavaScript。
nosniff
即是告訴瀏覽器不用幫我們猜 MIME Type
X-XSS-Protection
當瀏覽器檢測到有 XSS 攻擊的情況時,會做出特定動作。根據 MDN 的說法,對現代的瀏覽器而言,其實這個 Header 已經不太重要了,但總是聊勝於無嘛。
0
停用 XSS 過濾1
啟用 XSS 過濾 (大部分瀏覽器的預設值),當偵測到問題時,瀏覽器會將不安全的部分移除。1; mode=block
啟用 XSS 過濾,連移除都不用了,直接停止 Render 頁面
Render 在一些參考資料中通常翻譯為「渲染」,但其實稱為「轉譯」應更為貼切,故筆者還是習慣以英文稱之。
建議設定值
server
{
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
}
參考資料
本文由作者 Chiahong 發表於 iBe 隨筆,歡迎分享,如需引用時請註明來源,感謝您!