ホームページ >バックエンド開発 >PHPチュートリアル >誰かが投票システムで投票をスワイプしています。解決してください。
投票システム PHP セッション
<?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) 印刷して見てください
すると、登録ユーザーのみが投票できると判断できます。そして投票終了後、次回投票する場合は修正時間を判定するだけです。
配列 ( [0] => 配列 ( [id] => 59 [addTime] => 1371531470 ) [1] => 配列 ( [id] => 45 [addTime] => 1371531349 ) [2] => 配列 ( [id] => 43 [addTime] => 1371531316 ) [3] => 配列 ( [id] => 41 [addTime] => 1371531233 ) )
私IP print_r($arr) の結果は上記の通りです
しかし、データベース内のチケットスワイプ機の記録は、1時間以内に同じIDとIPが連続してデータベースに挿入される可能性があると私の判断です。無効です。アドバイスしてください
この種の投票では、投票するための登録は絶対に必要ありません。重要なのは、投票ブラッシング マシンが 1 時間以内にそれを挿入し続けることができる理由です。 @xuzuning
if($_SESSION['ipid']==$ipid||$_COOKIE['ipid']==$ipid)
if($_SESSION['ipid']==$ipid||$_COOKIE['ipid']==$ipid)
また、ID が増加すると、データベース内の時間レコードが減少することがあります。これは何ですか?
セッションと Cookie は偽造や消去が簡単すぎます。検証コードはどうなるのでしょうか?
セッション、Cookie、IP などの問題をすべて解決したとしても、認証コードがなければ簡単にスワイプされます
さまざまな方法でスワイプされる可能性があります。