這是我參與8月更文挑戰的第六天,活動詳情查看:8月更文挑戰瀏覽器
最近腦子抽風,總是想着和黑客們對抗一下。最近就想到一個問題,若是一個黑客惡意訪問個人網站,我改怎麼辦?這還用說,照個人脾氣,確定是找到他,摟他一頓!那麼問題來了,怎麼找到他呢?因而,我上網查資料,發現http中有這麼幾個請求頭是有關訪問地址記錄的。服務器
remote_addrmarkdown
是最近一次代理服務器或者直接是客戶端(中間不存在任何代理服務器的狀況)的請求ip;其不能夠僞造,由於TCP的創建是要通過三次握手的,若是僞造了源ip,就沒法創建TCP,因此僞造remote_addr是一件沒有意義的事情;post
X-Real-IP網站
這是一個自定義頭,X-Real-Ip 一般被 HTTP 代理用來表示與它產生 TCP 鏈接的設備 IP,這個設備多是其餘代理,也多是真正的請求端。須要注意的是,X-Real-Ip 目前並不屬於任何標準,代理和 Web 應用之間能夠約定用任何自定義頭來傳遞這個信息spa
X-Forwarded-For(獲取到的並不必定真實)插件
這是一個擴展頭。這是惟一一個在擁有代理服務器的狀況下,可以得到客戶端ip地址的請求頭。他的請求頭格式爲:代理
X-Forwarded-For:client,proxy1,proxy2
複製代碼
例如,一個http請求到達服務器以前通過了三個代理,name最終服務器得到的信息以下:code
X-Forwarded-For:IP0,IP1,IP2
複製代碼
最開始的ip0就是真實客戶端請求地址,其次依次是離客戶端最近的1,2號代理服務器。orm
那麼,爲何記錄中沒有最後一個代理服務器的ip呢?那就要從它的工做流程提及了!
在整個http請求過程當中,每一個服務器都記錄了上一個服務器傳遞過來的信息,而後將上一個服務器信息追加到這個信息的後面,而且將這些消息傳遞給下一個服務器。以此類推,最後一個服務器只是將上一個服務器信息追加到以前全部代理服務器信息的後面,並無將本身的信息放入,而後直接發給服務器端了。這樣就形成了整個請求頭信息中,包含了http請求過程當中通過的全部代理服務器的信息,可是就是沒有最後一個代理服務器的地址信息,若是咱們想要獲取到最後一個服務器的信息,那麼該怎麼辦?咱們就能夠用remote_addr字段來獲取(以上論述中的信息都是指該請求頭中的信息)。
這麼看來,X-Forwarded-For插件,而後就能夠自定義本身的X-forward-For請求頭ip了。因此,咱們最好仍是經過客戶端本身帶上ip來獲取訪問者ip。請求頭中攜帶的ip地址能讓咱們找到真正的訪問者ip,其實否則,這個地址也是能夠僞造的。好比,就能夠在火狐瀏覽器中下載一個X-Forwarded-For插件,而後就能夠自定義本身的X-forward-For請求頭ip了。因此,咱們最好仍是經過客戶端本身帶上ip來獲取訪問者ip。因此這次和黑客的聯想對戰,我輸了,仍是我太菜雞了!!!