2010-01-29 87 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来阻止它。