2012-04-29 71 views
3

我使用PHPMySQL,我想用戶的IP地址存儲到數據庫中比較目的(例如只允許一個標誌,每個IP線程)。按照以下方式進行操作可以嗎?加密用戶的IP地址

檢索在PHP:

$ipAddress = md5($_SERVER["REMOTE_ADDR"]); 

然後將其保存到數據庫作爲VARCHAR(32)

如果我必須更全面地使用IP,這不是我想要的正確方法,但如果只是爲了確保相同的IP沒有做兩次就可以了使用md5加密來簡化事情(統一IPv4IPv6地址爲一)?

+5

雞蛋裏挑骨頭的評論已經回答了,但是MD5是一種散列算法,加密不。加密是不同的。 – 2012-04-29 04:55:13

+1

爲什麼要加密?爲什麼要引用IPS?他們是不可預測的。 – Philip 2012-04-29 04:57:19

+2

爲什麼要加密? IP不是敏感信息。 – 2012-04-29 04:58:16

回答

5

是的,這很好,雖然你的術語是錯誤的:這是散列,哈希不是加密。

您還應該分析X-FORWARDED-FORClient-IP標題,除非您想阻止代理人身後的每個人,就好像他們是單個用戶(例如大公司,高中等的所有人)。

+0

感謝您的建議。是的,我的術語是錯誤的。我並不是想強調'md5'哈希算法或安全性,而是爲了使IP更「統一」(或正常化),以便更容易地存儲 – federicot 2012-04-29 05:40:22

+0

@YourCommonSense冷靜下來,您可能會認爲這是毫無意義的問題,但不是。這是我需要的一個Web應用程序,它已經被回答了。它是沒有意義的是做出像你這樣的評論 – federicot 2012-04-30 06:58:03

+0

@JohnDoe感謝您的評論,我收到了這件事。請閱讀我的答案。 – 2012-04-30 07:11:27

2

您可能需要考慮將IP轉換爲數字。查找起來更快一些,因爲它是數字數據,您可以在查詢中使用INET_ATON()和INET_NTOA()。

http://dev.mysql.com/doc/refman/5.5/en/miscellaneous-functions.html#function_inet-aton

mysql> SELECT INET_ATON('10.0.5.9'); 
     -> 167773449 

http://dev.mysql.com/doc/refman/5.5/en/miscellaneous-functions.html#function_inet-ntoa

mysql> SELECT INET_NTOA(167773449); 
     -> '10.0.5.9' 

PHP來轉換爲數字

$ipA = $_SERVER["REMOTE_ADDR"]; 
$octets = split ("\.", $ipA); 
$ipN = ($octets[3] + $octets[2] * 256 + $octets[1] * pow(256,2) + $octets[0] * pow(256,3); 

而且,你可能要考慮你使用此功能使用的IP地址:

/* Get Actual IP Address, in spite of proxy server */ 
function getRealIpAddr() { 
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet 
    { $ip=$_SERVER['HTTP_CLIENT_IP']; } 
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //to check ip is pass from proxy 
    { $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; } 
    else 
    { $ip=$_SERVER['REMOTE_ADDR']; } 
    return $ip; 
} 

RE - 編輯對IPv6

原則仍然適用,但IPv6的轉換在How to convert IPv6 from binary for storage in MySQL

+0

IPv6怎麼樣? – 2012-04-30 08:26:08

+0

不可以。你不會像這樣在點八位字節中得到IPv6地址。您的代碼將無法正常工作。 – 2012-05-01 22:24:37

+0

公平 - 沒有正確迴應評論,所以改變了我的答案,以反映鏈接到IPv6轉換,但我相信原始問題的答案仍然適用。 – GDP 2012-05-02 14:11:33