今天發生了一件很玄學的事情。html
今天業務在羣裏面發消息說:"客服今天收到客戶反饋一個網站:https://www.***./,點進去以後,發現進入的是咱們商城的前臺,如出一轍,也能夠進入chat聊天。咱們在這個網站測試下了個訂單,發現提交後,咱們後臺也是能夠搜到這個訂單的: 這個網站是咱們的嗎?只是域名不一樣嗎?nginx
咱們全體開發仔細盯了盯而後思考了一下,這個網站不是咱們的啊。而後開始研究了這個網站,發現這個網站就是用 iframe
嵌入了咱們的網站。"shell
WTFbash
就是下面這種代碼app
<iframe title="****" src="https://www.****.com/****.html" height="100%" width="100%" frameborder="0"></iframe>
複製代碼
這是個大問題啊,萬一誤導客戶之後這相似的網站作一些釣魚的連接把咱們的名聲搞壞就不得了了。要想辦法杜絕這種相似的問題。測試
後面想到用 Response Header 頭來解決這個問題,就是增長一個 X-Frame-Options
的頭信息網站
X-Frame-Options: deny
X-Frame-Options: sameorigin
X-Frame-Options: allow-from https://example.com/
複製代碼
具體其餘的描述能夠看 X-Frame-Options 資料spa
在代碼中寫 Header
頭和在 nginx
裏面增長請求頭咱們選擇了後者。code
後面再 Nginx 裏面的 的 http 裏面增長了一個 add_header X-Frame-Options: sameorigin
後面 reload
了 nginx
後發現怎麼都無論用,在本地就有用。server
後面又回到了無聊的翻 nginx
文檔的時候。翻到了下面這句話。
There could be several add_header directives. These directives are inherited from the previous level if and only if there are no add_header directives defined on the current level.
大體意思就是,若是當前級別沒有定義 add_header 則會繼承上一級,若是定義了 add_header 則不會去理會上一級。
若是這句話看不懂,下面咱們來看下面的例子。
下面在響應中返回頭信息包含什麼?
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
add_header A aa
server {
...
add_header B bb
}
}
複製代碼
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
add_header A aa
server {
...
location ~
{
add_header C cc
}
}
}
複製代碼
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
add_header A aa
server {
...
add_header B bb
...
location ~
{
add_header C cc
}
}
}
複製代碼
一、請求頭上會增長 B aa 把 A aa 放棄。
二、請求頭上會增長 C cc 把 A aa 放棄。
二、請求頭上會增長 C cc 把 A aa 和 B bb 放棄。
這個坑就是 Nginx 的繼承的一個特性,當子層級設置了 add_header
,會直接不使用父級的 add_header
。
一樣的指令還有 add_trailer
和 expires
想了解更多能夠 Module ngx_http_headers_module
仍是得多看文檔啊。