當前正在做的一個PHP項目,需要驗證用戶的IP地址是否在授權范圍中,請問有什么方法可以避免用戶偽造IP?或者,是否能提供一個其他思路?補充:實際場景為rest調用,調用和被調用端都為服務器~
3 回答

慕勒3428872
TA貢獻1848條經驗 獲得超6個贊
提供幾個思路:
如果是局域網環境,那么建議你從系統上,甚至路由器上去限制IP
如果是公開的,偽造IP將無法收到你的Response,也就是說這個Response會發到那個被偽造的IP去。所以,除非是對你做泛洪攻擊,偽造IP沒有意義。
再說你評論的那個方案,其實是一種驗證的手段,我倒是覺得,這種手段和對稱加密沒什么兩樣,當然對稱加密成本要比你說的握手方式成本低很多。
總之,限制IP是為了做訪問限制,而為了數據安全,還是要做加密和身份驗證,對稱加密是個好辦法(對稱加密中加入時間等元素,安全性一般比較高)。

絕地無雙
TA貢獻1946條經驗 獲得超4個贊
"HTTP_" 開頭的$_SERVER很容易偽造.
服務段判斷還是挺容易的. 其實下面這個代碼也是判斷是否使用proxy.
<?php if ( $_SERVER['HTTP_X_FORWARDED_FOR'] || $_SERVER['HTTP_X_FORWARDED'] || $_SERVER['HTTP_FORWARDED_FOR'] || $_SERVER['HTTP_CLIENT_IP'] || $_SERVER['HTTP_VIA'] || in_array($_SERVER['REMOTE_PORT'], array(8080,80,6588,8000,3128,553,554))) || @fsockopen($_SERVER['REMOTE_ADDR'], 80, $errno, $errstr, 30)) { echo "we caught you"; } ?>
結論:服務段最好只取$_SERVER['REMOTE_ADDR']

吃雞游戲
TA貢獻1829條經驗 獲得超7個贊
"X-FORWARDED-FOR" 是代理服務器通過 HTTP Headers 提供的客戶端IP。代理服務器可以偽造任何IP。
要防止偽造,不要讀這個IP即可(同時告訴用戶不要用HTTP 代理)。
如果是PHP,$_SERVER['REMOTE_ADDR'] 就是跟你服務器直接連接的IP,用這個就可以了。
- 3 回答
- 0 關注
- 151 瀏覽
添加回答
舉報
0/150
提交
取消