2013-01-08 63 views
0

我試圖阻止多個帳戶來自同一個IP:如何只允許每個IP兩個帳戶?

if (! empty($_SERVER['HTTP_CLIENT_IP'])) 
{ 
    $ip = $_SERVER['HTTP_CLIENT_IP']; 
} 
elseif (! empty($_SERVER['HTTP_X_FORWARDED_FOR'])) 
{ 
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
} 
else 
{ 
    $ip = $_SERVER['REMOTE_ADDR']; 
} 

$stmt = $db->prepare("SELECT 1 FROM users WHERE ip = :ip"); 
$stmt->bindParam(':ip', $ip, PDO::PARAM_STR); 
$result = $stmt->execute(); 
$row = $stmt->fetch(); 

if ($row) 
{ 
    die("Only one account per IP is allowed !"); 
} 

這工作,但如果我想允許每個IP兩個賬戶?我試過了:

$stmt = $db->prepare("SELECT * FROM users WHERE ip = :ip"); 
$stmt->bindParam(':ip', $ip, PDO::PARAM_STR); 
$result = $stmt->execute(); 
$row = $stmt->fetch(); 

if ($row > 1) 
{ 
    die("Only one account per IP is allowed !"); 
} 

不起作用。第二個帳戶是不允許的。

+6

這是一個從根本上被誤導的想法。如果600個用戶在同一個IP後面怎麼辦?這有可能發生。另外,請注意,您可以使用的僅**可靠的IP信息是'REMOTE_ADDR'。其他所有內容都是從客戶端頭獲取的,可以**免費**欺騙。 –

+0

@Pekka웃,有可能嗎?那麼IP的目的是什麼? – Alegro

+0

也是PHP的腳本編寫,如果你想強加這種限制,你應該操縱你的http守護程序配置,你的假設是錯誤的。 – user1824407

回答

1

只需更新查詢象下面這樣:

$stmt = $db->prepare("SELECT count(*) FROM users WHERE ip = :ip"); 
相關問題