2010-01-29 91 views
5

什麼是一些代碼示例,我可以用來阻止人們投票,通過黑客攻擊php腳本來給他們更高的評分?停止使用PHP劫持投票系統的人?

+1

呃,我不明白這個問題。當然,腳本運行在用戶無法訪問的服務器上,對吧?也就是說,他們不應該訪問實際的PHP腳本,只能調用它。 –

+2

我的朋友,你將不得不進入更多的細節。 :) –

回答

4

國防的第一線是一塊餅乾。

基本上,你在他們的機器上設置了cookie,並且如果它存在則禁用投票。

setcookie('cookiename', 'voted=1'); 

// and later 

if(isset($_COOKIE['cookiename']) && $_COOKIE['cookiename'] = "voted=1") 
{ 
    // error 
} 

這樣可以避免爲驗證其投票而需要進行的數據庫調用。保持這一點是一個好主意,因爲它就像緩存:少數人對數據庫的命中率更高。

第二道防線是IP限制。你基本上會檢查數據庫中的IP地址日誌,看看他們最近是否投了票。

mysql_query('INSERT INTO TABLE (`IP_ADDR`, `TIME`) VALUES("'.$_SERVER['REMOTE_ADDR'].'", "'.time().'")'); 

// and later 

$results = mysql_query('SELECT IP_ADDR FROM TABLE WHERE IP_ADDR="'.$_SERVER['REMOTE_ADDR'].'"'); 

if(mysql_num_rows($results) != 0) 
{ 
    // error 
} 

把你的整個腳本到的東西沿着

if(isset($_COOKIE['cookiename']) && $_COOKIE['cookiename'] = "voted=1") 
{ 
    die("You have voted recently."); 
} 

$results = mysql_query('SELECT IP_ADDR FROM TABLE WHERE IP_ADDR="'.$_SERVER['REMOTE_ADDR'].'"'); 

if(mysql_num_rows($results) != 0) 
{ 
    die("You have voted recently"); 
} 

//Do Voting Stuff Here 
vote($_GET['vote']); 

// Record the vote. 
setcookie('cookiename', 'voted=1'); 
mysql_query('INSERT INTO TABLE (`IP_ADDR`, `TIME`) VALUES("'.$_SERVER['REMOTE_ADDR'].'", "'.time().'")'); 

行您還可以在到期的時間及增加,但它的基本JIST是存在的。

+0

注意:如果您在數據庫中發現他們最近投了票,您可能需要重置Cookie。 –

3
  1. 將cookie設置爲已投票的用戶並且不允許投票一段時間。

  2. 除了cookies保護之外,還增加了ip地址保護功能。單個IP地址每一段時間只能投一次。 ip保護的好選擇是通過組合方案(ip + user_agent + ...)進行保護。

  3. 要求用戶在操作過快時輸入驗證碼。

+1

順便說一句,你不需要保持整個IP日誌。只保留最近1個小時的日誌 - 這將甚至足夠。 – Kirzilla

2

一對夫婦的想法:

  1. 使用CAPTCHA
  2. 記錄IP地址(按照您的隱私政策,當然)
1

阻止他們這樣做的唯一方法是建立一個良好的用戶認證系統。除此之外,你可以通過使用cookies和Captcha來阻止它。