新闻中心News Center

行业新闻 公司新闻

首页 > 新闻中心

[資安技術] 如何正確的取得使用者 IP?

时间: 2026-06-29 点击数:
資訊安全 作者/ DEVCORE

-

2014 年 06 月 19 日 刊登廣告? 點此聯絡


很多網站都會有偵測使用者 IP 的功能,不管是判斷使用者來自哪邊,或者是記錄使用者的位置。但是你知道嗎?網路上大多數的教學全部都是「錯誤」的。正確的程式寫法可以確保知道訪客的 IP,但是錯誤的寫法卻可能讓網站管理者永遠不知道犯罪者的來源。

這次我們單就偵測 IP 的議題來探討各種錯誤的寫法。

你知道網路上的教學是不安全的嗎?

我們先來看一下網路上的教學,讓我們 Google 找一下「PHP 取得 IP」,就可以看到許多人熱心的教學,我們隨意挑一個常見的教學來看看。

以 PHP 為例:

以 ASP.NET 為例:

Dim ClientIP As String = Request.ServerVariables("HTTP_X_FORWARDED_FOR") 
IF ClientIP = String.Empty Then 
 ClientIP = Request.ServerVariables("REMOTE_ADDR") 
End IF

這是一個很基本的寫法、很正確的想法,如果 HTTP Header 中包含「Client-IP」,就先以他當作真實 IP。若包含「X-Forwarded-For」,則取他當作真實 IP。若兩者都沒有,則取「REMOTE_ADDR」變數作為真實 IP。因為當使用者連線時透過代理伺服器時,REMOTE_ADDR 會顯示為代理伺服器 Proxy 的 IP。部分代理伺服器會將使用者的原始真實 IP 放在 Client-IP 或 X-Forwarded-For header 中傳遞,如果在變數中呼叫則可以取得真實 IP。

但是你知道嗎?網路上 80% 的教學寫法全部都是「錯誤」的。

為什麼這樣說呢?請大家記得一件事情:「任何從客戶端取得的資料都是不可信任的!

竄改 HTTP Header

「X-Forwarded-For」這個變數雖然「有機會」取得使用者的真實 IP,但是由於這個值是從客戶端傳送過來的,所以「有可能」被使用者竄改。

舉例來說,我寫了一個小程式,偵測這些常見的 HTTP Header 判斷 IP。並且使用 Burp Suite 這個工具來修改 HTTP Request。

頁面上顯示目前我目前的 IP「49.50.68.17」,並且其他的 header 是空的。但如果我今天使用 Burp Suite 之類的 Proxy 工具自行竄改封包,加上 X-Forwarded-For 或是 Client-IP header:

修改完畢之後,再到原本的顯示 IP 介面,會發現網頁錯將我竄改的 header 當作正確的資料填入。

使用代理伺服器 Proxy 的情況

使用代理伺服器的情況下,HTTP Header 會有不同的行為。例如 Elite Proxy 如何隱藏客戶端的真實 IP。以下簡單介紹幾種常見的狀況給各位參考。

直接連線 (沒有使用 Proxy)
Transparent Proxy
Anonymous Proxy
High Anonymity Proxy (Elite Proxy)

實際情況

在我們測試的過程中,通常我們都會讓瀏覽器自帶 X-Forwarded-For,並且自行填入 IP。常常會發現有一些網站出現如下的警告

有沒有搞錯?「上次登入位置 127.0.0.1」?沒錯,這個是知名論壇套件「Discuz!」的功能,抓取 IP 的功能也是不安全的寫法。也有這樣的經驗,之前開著 X-Forwarded-For 的 header 到一些網站,竟然直接出現管理者後台!

你覺得只有一般人撰寫的程式會有這樣的問題嗎?其實大型網站也可能會有類似的問題:

先不論為什麼 127.0.0.1 會在美國,這樣的寫法可能會讓管理者永遠抓不到犯罪者的真實 IP,甚至攻擊者可以竄改 header 插入特殊字元,對網站進行 SQL Injection 或者 Cross-Site Scripting 攻擊。

正確又安全的方式

任何從客戶端取得的資料都是不可信任的!

請各位開發者、管理者記住這個大原則,雖然這些 Request Header 可能含有真實 IP 的資訊,但是因為他的安全性不高,因此我們絕對不能完全信賴這個數值。

那我們該怎麼處理呢?我的建議是記錄所有相關的 header 欄位存入資料庫,包含「REMOTE_ADDR」「X-Forwarded-For」等等,真正有犯罪事件發生時,就可以調出所有完整的 IP 資訊進行人工判斷,找出真正的 IP。當然從 header 存入的數值也可能會遭到攻擊者竄改插入特殊字元嘗試 SQL Injection,因此存入值必須先經過過濾,或者使用 Prepared Statement 進行存放。

可以參考的 HTTP Header(依照可能存放真實 IP 的順序)

「駭客思維」就是找出網站任何可能竄改的弱點,從網頁上的元素到 HTTP Header 都是嘗試的對象。因此身為防禦者一定要清楚的知道哪些數值是不能信賴的,不要再參考網路上錯誤的教學了!

訂閱《手哥科科》YT,加入 5,000+ 位粉! 相關文章/報導

Google 不再信任中華電信簽發的憑證,這代表什麼?該怎麼辦?

AI

傻眼欸!AI工具到底安不安全啊?這5個隱私雷區我幫你們親身試過啦!

趨勢與 Intel 合作,運用 NPU 強化主動偵測、適應能力及電子郵件防護

00:01:13

打開就中毒!WinRAR 出現嚴重漏洞,現在就更新!

Google 宣布 12 月起刪除 2 年內沒使用的閒置帳號

簡訊實聯制會造成個資外洩嗎?為何不用基地台定位就好?

資訊安全

駭客駭入網路攝影機,假裝聖誕老人嚇壞小女孩

CloudFlare 推出 1.1.1.1 高速 DNS 服務,提供更完整隱私保護

iOS 程式原始碼外洩 還在用 iOS 9 要小心了

卡巴斯基 (Kaspersky) 推出免費版防毒,台灣已開放下載

DEVCORE 戴夫寇爾 (DEVCORE) 成立於 2011 年,成員曾拿下台灣兩大資訊安全競賽(資安技能金盾獎、台灣駭客年會) 冠軍,並長年於各大專院校、社群與國內外研討會中推廣資安技術。戴夫寇爾團隊熱衷挑戰駭客思維、創新技術,藉由對技術的熱情,為企業建立堅強的資安後盾,協助打造更穩固的主顧信賴關係,讓企業與民眾的數位資產得到有效的保障。 《手哥科科》YouTube 頻道 從電視的大螢幕到手機的小螢幕,要維持一致的顯示色彩也是不容易的事情,三星這個 Demo 讓大家知道它們做得到 #computex2026 00:22 HKC 在 #Computex 上推出的全球首款 83.4 吋 12K 超寬曲面螢幕,這款螢幕的寬度寬到兩邊都還要用支撐架來輔助穩定。但這個體驗真的相當讚,臨場感滿分。 00:19 不用一直盯小孩!SpotCam BabyCam Pro 實測:AI 偵測、5 吋螢幕、24 小時雲端錄影一次看 12:36 過年春節拍照手機空間不夠? 用這招讓你不會錯失任何一個珍貴畫面!#pCloud 春節42折優惠 03:56 比架 NAS 還划算!pCloud 雲端硬碟,付一次費終身使用!雙11限定38折! 05:58

留下一個評論 取消

發表評論: 請輸入你的評論! 姓名:* 請在這裡輸入你的名字 電子郵件:* 您輸入了錯誤的電子郵件地址! 請在此輸入您的電子郵件地址 網址:

在我的瀏覽器中保存我的姓名,電子郵件和網站,以便下次評論。

新文章使用電子郵件通知我。

Δ

友情链接: