首頁 >後端開發 >php教程 >我們是不是不能真正做到網站web伺服器端限制用戶ip?

我們是不是不能真正做到網站web伺服器端限制用戶ip?

WBOY
WBOY原創
2016-10-11 14:23:46936瀏覽

剛才問了個nginx轉發upstream改變轉發來源ip的問題,既然存取請求來源的ip可以被隨意改變,那麼我們在web服務端獲得的ip也就是不能完全相信的了,那麼我們應該什麼方式來限制使用者真實ip,還是確實這條路不可行?

回覆內容:

剛才問了個nginx轉發upstream改變轉發來源ip的問題,既然存取請求來源的ip可以被隨意改變,那麼我們在web服務端獲得的ip也就是不能完全相信的了,那麼我們應該什麼方式來限制使用者真實ip,還是確實這條路不可行?

nginx是 【你】搭建的,還是要 【被禁止的使用者】 搭建的?

HTTP_X_FORWARD_FOR是可以偽造的,但是 REMOTE_ADDR 是改變不了的。

如果是 【被禁止的使用者】 的搭建的:
你可以透過$_SERVER["REMOTE_ADDR"]可以取得到nginx伺服器的IP,直接封。

如果是 【你】搭建的nginx:
雖然可以透過$_SERVER["HTTP_X_FORWARD_FOR"]取得到使用者的IP,但有可能是偽造的。

<code>proxy_set_header X-Forward-For $remote_addr</code>

最好的方法是增加私有的HTTP頭,nginx轉發時增加私有http頭X-GAGAGA(嘎嘎嘎,猜不到吧),使用$_SERVER["HTTP_X_GAGAGA"]獲取,這樣攻擊這即使祥偽造,也不知道需要偽造啥。

<code>proxy_set_header X-GAGAGA $remote_addr</code>

另外,阿里旗下WW現在御用的代理平台HL系統因為HTTP_X_FORWARD_FOR過濾不嚴,精心構造請求可注入。 。 。 (現在新版已經修復)


關於偽造,如果 你用的 Linux/Unix/OSX,自帶的curl就可以實現:

<code>curl abc.com/test.php -H "X-FORWARD-FOR:8.8.8.8"</code>

如果不過濾,剛好有直接透過IP來判斷是否再黑名單或後台有記錄IP操作日誌的功能:

<code>#想注入就注入
curl miaoqiyuan.cn/test.php -H "X-FORWARD-FOR:' or 'a'='a"
#想XSS就XSS
curl miaoqiyuan.cn/test.php -H "X-FORWARD-FOR:alert('a')"</code>

我們是不是不能真正做到網站web伺服器端限制用戶ip?

我想了個方案,可以設定nginx的時候,加入proxy_set_header X-Forward-For $remote_addr 設定。然後$_SERVER["HTTP_X_FORWARD_FOR"]取得使用者的真實IP,然後再程式裡面進行IP的限制。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn