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

WBOY
풀어 주다: 2016-06-23 14:13:43
원래의
1124명이 탐색했습니다.

本帖最后由 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;		}}?>
로그인 후 복사



回复讨论(解决方案)

$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)
로그인 후 복사
로그인 후 복사


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

if($_SESSION['ipid']==$ipid||$_COOKIE['ipid']==$ipid)
로그인 후 복사
로그인 후 복사


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

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


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

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

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿