2013-05-02 42 views
2

當用戶訪問我的網站im在數據庫中記錄他們的IP地址時,這是防範欺詐/垃圾郵件的預防措施。獲取用戶ip並檢查阻止列表?

即時通訊使用此查詢存儲用戶的ip

$sql = "INSERT INTO ptb_sessions (session_id, user_ip, session_start, date, session_end) VALUES (NULL, '" . $_SERVER['REMOTE_ADDR'] . "', UTC_TIMESTAMP(), ADDDATE(), NULL);"; 
       mysql_query($sql, $connection); 

我現在想要做的是有一個腳本,獲取IP的情況下,進行檢查,看是否該IP地址我的表ptb_blocked_users存在如果確實如此,則將用戶重定向到阻止的頁面。

我可以這樣做嗎?

$result = mysql_query("SELECT id FROM mytable"); 
if(mysql_num_rows($result) == " . $_SERVER['REMOTE_ADDR'] . ") { 
    // row not found, show page.. 
} else { 
    // block page 
} 

有人能告訴我我該如何去做這個請嗎?

在此先感謝

+0

使用$ _SERVER ['REMOTE_ADDR']檢查被禁止的表。如果條目存在'header(「Location:banned.php」);退出();' – Waygood 2013-05-02 10:28:43

回答

1

您可以檢查IP是否在阻止數據庫或沒有時,你要檢查它每次都存在,

$ip_addres=$_SERVER['REMOTE_ADDR']; 
    $query="SELECT `ip` FROM `ptb_blocked_users` WHERE user_ip='$ip_addres'"; 
    $result=mysql_query($query) or die('query failed'); 
    if(mysql_num_rows($result)>0) 
    { 
    //redirect to block page 
    } 
    else 
    { 
     //continue to script 
    } 

對於IPv4和IPv6支持使用inet_pton()和inet_ntop( ),自PHP 5.1以上版本起可用,並且模仿完全相同的MySQL功能。

否則只要使用ip2long()和long2ip()。

的ip2long()和long2ip()函數應該工作

例如:使用

var_dump(ip2long('209.85.227.147')); 
var_dump(long2ip(3512066963)); 

INSERT table(ip) VALUES (INET_ATON('192.168.0.1')); /*ip = 3232235521*/ 
SELECT INET_NTOA(ip) As IPAddress FROM table; /*IPAddress = 192.168.0.1*/ 
0

像這樣的東西應該工作

$sql = mysql_query("SELECT user_ip FROM ptb_blocked_users WHERE user_ip = '" . $_SERVER['REMOTE_ADDR'] . "' "); 
if(mysql_num_rows($sql) > 0) { 
die(header("location: url")); 
} 
1

你應該花一些時間分析你的數據。即使在會話中,IP地址也不是靜態的。而且,無論何時使用IP地址,將它們視爲數字都會更簡單。

雖然它被防呆很長的路要走:

CREATE TABLE block_list 
(
    trunc_ip INT(4), 
    added TIMESTAMP 
    PRIMARY KEY (trunc_ip) 
); 

要阻止:

INSERT INTO block_list (trunc_ip) 
VALUES (256*FLOOR(INET_ATON('" . $_SERVER['REMOTE_ADDR'] . "')/256); 

,並檢查塊:

SELECT 1 AS isblocked 
FROM block_list 
WHERE trunc_ip=(256*FLOOR(INET_ATON('" . $_SERVER['REMOTE_ADDR'] . "')/256); 

...讓你去掉一個8位的子網。

但有更好的解決方案,包括:

  • 需要驗證的電子郵件地址
    • 使用OpenID支持電子郵件服務提供商 和/或
    • 不允許張貼的電子郵件驗證
  • Browser fingerprinting
+0

'trunc_ip'會有什麼值我有點困惑 – 2013-05-02 11:32:39

+0

我想知道更多關於這個請給我參考一下 – 2013-05-02 11:34:58

+0

http://support.microsoft.com/kb/164015 – symcbean 2013-05-02 11:50:28