投票系统 有人刷票 求大神帮忙解决

WBOY
Release: 2016-06-23 14:13:43
Original
1126 people have browsed it

本帖最后由 u010603569 于 2013-06-21 08:55:59 编辑

投票系统 PHP session


我这投票是一个IP地址在一个小时只能只能对一个ID投一票,但是那些刷票机器为什么能绕过一个小时,同一个IP能在一个小时之内不断的写入数据库,这点让我很不解,一个小时的时间限制完全对刷票机器不起作用,求大神帮忙解决,验证码很不友好,能不能有什么好方法解决这个问题[size=36px][/size]
<?phperror_reporting(0);session_start();require_once 'config.php';require_once COMMON_PATH.'Common.php';$common = new Common();date_default_timezone_set ('Asia/Shanghai');$weil = strtotime("2013-08-07 23:59:59"); $now = time();if($weil-$now < 0){//投票时间过期	echo 0;	exit;}$ip  = $common->getClientIp();$id  = $_POST['id'];$ipid=$ip.$id;if($_SESSION['ipid']==$ipid||$_COOKIE['ipid']==$ipid){//$array = array('48','49','67','47'); //if ( in_array($id,$array) ) {		echo 2;	} else {		$tbName = TB_NAME;		$limit_time = 3600;		$arr = $common->getItems('id,addTime','20130618_ztao_jtsjip','id','desc',"where tpId='$id' and ip='$ip'");		$row = false;		if (count($arr) > 0) {			$row = $arr[0];		}		if(!$row){				$common->insertItems('20130618_ztao_jtsjip','tpId,ip,addTime',"'$id','$ip','$now'");				$res = $common->updateItems("$tbName",'voteNum=voteNum+1',"$id");				$_SESSION['ipid']=$ipid;				setcookie("ipid","$ipid",time()+$limit_time);				if($res == true){					echo 1;//投票成功 				}else{					echo 3;				}					}else if(($now-$row['addTime'])>$limit_time){			$common->insertItems('20130618_ztao_jtsjip','tpId,ip,addTime',"'$id','$ip','$now'");			$res = $common->updateItems("$tbName",'voteNum=voteNum+1',"$id");			$_SESSION['ipid']=$ipid;			setcookie("ipid","$ipid",time()+$limit_time);			if($res == true){				echo 1;			}else{				echo 3;			}		}else if(($now-$row['addTime'])<$limit_time){			echo 2;		}else{			echo 3;		}}?>
Copy after login



回复讨论(解决方案)

$arr = $common->getItems('id,addTime','20130618_ztao_jtsjip','id','desc',"where tpId='$id' and ip='$ip'");
返回了什么?print_r($arr) 打印出来看看

那你判断下,如果是注册的用户,才可以投票的。并且投票完成,加一个修改时间,下次投票的话,判断下修改时间即可。

Array ( [0] => Array ( [id] => 59 [addTime] => 1371531470 ) [1] => Array ( [id] => 45 [addTime] => 1371531349 ) [2] => Array ( [id] => 43 [addTime] => 1371531316 ) [3] => Array ( [id] => 41 [addTime] => 1371531233 ) )

我的IP print_r($arr)得到的结果如上
但是刷票机器的在数据库的记录是这样的如图 同一个id 和Ip在一个小时之内能不断插入数据库,我的判断失效了,求教

这种投票肯定是不能要注册才能投票的,验证码都影响投票的用户体验,现在关键是刷票机器为什么在一个小时之内能不断的插入,这点很不解 @xuzuning

if($_SESSION['ipid']==$ipid||$_COOKIE['ipid']==$ipid)
Copy after login
Copy after login


cookie可以伪造,ip也是用户可以控制的
你看下是不是这个原因

if($_SESSION['ipid']==$ipid||$_COOKIE['ipid']==$ipid)
Copy after login
Copy after login


cookie可以伪造,ip也是用户可以控制的
你看下是不是这个原因

应该是id也是用户可以控制的


还有数据库中时间的记录随着Id的增加反而有时候还减小了,这是什么情况,求教大神解决

session和cookie的话太容易伪造了或者清空了,而且验证码呢?

就算你把session、cookie、ip等问题全部解决了,没有验证码的话很容易被刷的,各种方法都能刷的了你

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template