獲取用戶Ip地址通用方法與常見安全隱患(HTTP_X_FORWARDED_FOR)_PHP教程
推薦:web站點(diǎn)獲取用戶IP的安全方法 HTTP_X_FORWARDED_FOR檢驗(yàn)通過上一篇,獲取用戶Ip地址通用方法常見安全隱患(HTTP_X_FORWARDED_FOR) ,我們已經(jīng)意 識(shí)到直接從http_x_forwarded_for中讀取用戶IP,跟我們直接從一個(gè)get,post值中讀取其實(shí)沒有兩樣。web參數(shù)檢測里面一個(gè)基本原則:“一切輸入都是有害的”,因此,只要是輸入我們就需
分析過程這個(gè)來自一些項(xiàng)目中,獲取用戶Ip,進(jìn)行用戶操作行為的記錄,是常見并且經(jīng)常使用的。 一般朋友,都會(huì)看到如下通用獲取IP地址方法。
function getIP() {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$realip = $_SERVER['HTTP_CLIENT_IP'];
} else {
$realip = $_SERVER['REMOTE_ADDR'];
}
return $realip;
}
這個(gè)是網(wǎng)上常見獲取,ip函數(shù),用這些值獲取IP,我們首先要弄清楚,這些數(shù)據(jù)是從那個(gè)地方傳過來的。
IP獲取來源
1.'REMOTE_ADDR' 是遠(yuǎn)端IP,默認(rèn)來自tcp 連接是,客戶端的Ip。可以說,它最準(zhǔn)確,確定是,只會(huì)得到直接連服務(wù)器客戶端IP。如果對方通過代理服務(wù)器上網(wǎng),就發(fā)現(xiàn)。獲取到的是代理服務(wù)器IP了。
如:a->b(proxy)->c ,如果c 通過'REMOTE_ADDR' ,只能獲取到b的IP,獲取不到a的IP了。
另外:該IP想篡改將很難實(shí)現(xiàn),在傳遞知道生成php server值,都是直接生成的。
2.'HTTP_X_FORWARDED_FOR','HTTP_CLIENT_IP' 為了能在大型網(wǎng)絡(luò)中,獲取到最原始用戶IP,或者代理IP地址。對HTTp協(xié)議進(jìn)行擴(kuò)展。定義了實(shí)體頭。
HTTP_X_FORWARDED_FOR = clientip,proxy1,proxy2 所有IP用”,”分割。 HTTP_CLIENT_IP 在高級(jí)匿名代理中,這個(gè)代表了代理服務(wù)器IP。既然是http協(xié)議擴(kuò)展一個(gè)實(shí)體頭,并且這個(gè)值對于傳入端是信任的,信任傳入方按照規(guī)則格式輸入的。以下以x_forword_for例子加以說明,正常情況下,這個(gè)值變化過程。
![image image](/uploads/allimg/c130603/13F213362110-16155.png)
分析Bug風(fēng)險(xiǎn)點(diǎn):
通過剛剛分析我們發(fā)現(xiàn),其實(shí)這些變量,來自http請求的:x-forword-for字段,以及client-ip字段。 正常代理服務(wù)器,當(dāng)然會(huì)按rfc規(guī)范來傳入這些值。但是,當(dāng)一個(gè)用戶直接構(gòu)造該x-forword-for值,發(fā)送給用戶用戶,那將會(huì)怎么樣呢?
圖(1)
第2步,修改x-forword-fox值,我們看看結(jié)果
第三步,我們再修改下看看會(huì)怎么樣?
哈哈,看到上面結(jié)果沒,x-forwarded-for不光可以自己設(shè)置值,而且可以設(shè)置任意格式值。 這樣一來,好比就直接有一個(gè)可以寫入任意值的字段。并且服務(wù)器直接讀取,或者寫入數(shù)據(jù)庫,或者做顯示。它將帶來危險(xiǎn)性,跟一般對入輸入沒有做任何過濾檢測,之間操作數(shù)據(jù)源結(jié)果一樣。 并且容易帶來隱蔽性。
結(jié)論:上面getip函數(shù),除了客戶端可以任意偽造IP,并且可以傳入任意格式IP。 這樣結(jié)果會(huì)帶來2大問題,其一,如果你設(shè)置某個(gè)頁面,做IP限制。 對方可以容易修改IP不斷請求該頁面。 其二,這類數(shù)據(jù)你如果直接使用,將帶來SQL注冊,跨站攻擊等漏洞。至于其一,可以在業(yè)務(wù)上面做限制,最好不采用IP限制。 對于其二,這類可以帶來巨大網(wǎng)絡(luò)風(fēng)險(xiǎn)。我們必須加以糾正。
需要對getip 進(jìn)行修改,得到安全的getip函數(shù)。
這類問題,其實(shí)很容易出現(xiàn),以前我就利用這個(gè)騙取了大量偽裝投票。有它的隱蔽性,其實(shí)只要我們搞清楚了,某些值來龍去脈的話。理解了它的原理,修復(fù)該類bug將是非常容易。
題外話,做技術(shù),有三步,先要會(huì)做,會(huì)解決;后要思考為什么要這么做,原因原理是什么;最后是怎么樣做,有沒有其它方法。多問問自己,你發(fā)現(xiàn)距離技術(shù)真理越來越近。你做事會(huì)越來越得心應(yīng)手的!
作者:chengmo QQ:8292669
分享:Window 7/XP 安裝Apache 2.4與PHP 5.4 的過程詳解本篇文章是對Window 7/XP 安裝Apache 2.4與PHP 5.4 的過程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問控制的和運(yùn)算符優(yōu)先級(jí)介紹
- 關(guān)于PHP語言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國語言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
- 相關(guān)鏈接:
- 教程說明:
PHP教程-獲取用戶Ip地址通用方法與常見安全隱患(HTTP_X_FORWARDED_FOR)
。