【IP】偽造 && 甄別

狼騎舞者發表於2019-02-16

斷言

三重問:

  1. IP偽造是否可能?

  2. 1為True,IP偽造的規模性是否存在限制?

  3. 1為True,甄別IP偽造的成功率是多少?

IP偽造是否可能

這個問題簡單提一下,真實的IP偽造是很難實現的,TCP協議中,IP地址被封裝在IP資料包內,傳送出現任何問題,都將與其封裝的IP進行互動。

互動必定失敗,因為偽造IP具備了一個“只能傳送、不能接收”的特點,作為替代品,人們往往會採用代理IP。

IP偽造的規模性

無論是普匿、還是高匿,代理方的IP數量都是有限的,所以在規模性方面,的確存在限制。

但我一直都很懷疑,黑客們可以通過超量的遠端入侵,來完成規模性突破,當然,這種層面的安全,服務端已經很難產生效果了,更多的是客戶端的安全防護。

甄別IP偽造的成功率是多少

IP偽造的成功率是技術層面的,換而言之,目前常用的IP獲取方式(就PHP而言)有三種,分別是:

  • HTTP_CLIENT_IP:IP包的報頭,本應儲存客戶端IP,但並沒有一致性的標準。

  • HTTP_X_FORWARDED_FOR:偽造過於方便,而且偽造方式在網際網路上過於氾濫。

  • REMOTE_ADDR:末端IP,顯示的是資料包傳送端的IP——可能是代理IP,誰發包,誰簽名。但可能存在無值的結果。

三種IP的偽造方式:(源於豆瓣)

curl_setopt($curl, CURLOPT_HTTPHEADER, array (
            `Client_Ip: `.mt_rand(0, 255).`.`.mt_rand(0, 255).`.`.mt_rand(0, 255).`.`.mt_rand(0, 255),
));//優點:偽造成本低,通殺90%系統

curl_setopt($curl, CURLOPT_HTTPHEADER, array (
            `X-Forwarded-For: `.mt_rand(0, 255).`.`.mt_rand(0, 255).`.`.mt_rand(0, 255).`.`.mt_rand(0, 255),
));//優點:偽造成本低,通殺90%系統

curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($curl, CURLOPT_PROXY, `1.1.1.1:8080`);// 只能採用代理來進行模擬。
//優點:通殺100%系統

得出結論,由於HTTP_CLIENT_IPHTTP_X_FORWARDED_FOR的安全性不足,所以本應只採用,REMOTE_ADDR的值,但可能採集到空值。

傳聞:如果REMOTE_ADDR傳來的是負載均衡的節點IP,那麼前兩者是可信的,如果客戶端直接與伺服器對接,則前兩者依舊是存在偽造。

參考資料:
你永遠獲得不到我的真實IP
如何避免使用者訪問請求偽造IP

相關文章