PHP 上的客戶端 IPv6 但節點伺服器上的 IPv4 - 需要它們相同
P粉239164234
2023-09-04 19:35:35
<p>我遇到了與安全性和驗證相關的問題。我有一個軟體可以檢查以確認用戶,我需要確保發送 PHP 請求和節點伺服器請求的是相同客戶端。但是,在節點伺服器上,客戶端的 IP 以 IPv4 顯示,而在 PHP 上以 IPv6 顯示。有什麼方法可以在某處獲得相同的輸出,例如在節點伺服器上提取 IPv6 或在 PHP 伺服器上提取 IPv4?謝謝。 </p>
<p>取得相同的 IP 或驗證它是否為相同客戶端,儘管 IPv4 和 IPv6「不同」</p>
問題在於 IPv6 和 IPv4 沒有以任何方式耦合。無法從 v4 位址推斷出 v6 位址,反之亦然。
以我的拙見,您應該避免透過 IP 位址驗證用戶,因為 IP 位址是 欺騙,這種做法會導致此類問題。也就是說,有幾個“解決方案”。
在託管 PHP 應用程式的網頁伺服器上停用 IPv6。由於您沒有提到這是什麼類型的網頁伺服器,您應該能夠在Google上搜尋「停用 ipv6 apache」之類的內容來了解如何實現這一點。這應該保證兩台伺服器上的 IPv4 位址相同。我個人不太喜歡這個解決方案,因為它阻礙了 IPv6 的採用。
在節點伺服器上啟用 IPv6。請注意,出於任何原因,用戶端仍然可能更喜歡 IPv4 而不是 IPv6,並且無法保證它將對兩個網路伺服器使用 IPv6。
您可以將所有呼叫從一個網頁伺服器代理到另一台網頁伺服器,並在「X-Forwarded-For」標頭中傳遞原始 IP。這會引入一些開銷,但來源IP會更穩定。
就我個人而言,我會避免使用 IP 位址並實現某種儲存在客戶端上的令牌,如果可以的話,可以透過共用資料庫在兩台伺服器上進行驗證。