ホームページ >バックエンド開発 >PHPチュートリアル >誰かが投票システムで投票をスワイプしています。解決してください。

誰かが投票システムで投票をスワイプしています。解決してください。

WBOY
WBOYオリジナル
2016-06-23 14:13:431152ブラウズ

この投稿は、u010603569 によって、2013-06-21 08:55:59 に最終編集されました

投票システム PHP セッション


私の投票では、1 つの IP アドレスは 1 時間に 1 つの ID に対して 1 票しか投票できませんが、なぜチケット ブラッシング マシンは 1 時間を回避できますか? これは、チケット ブラッシング マシンでは 1 時間という制限がまったく機能しないので、困っています。確認コードは非常に不親切です。この問題を解決する良い方法はありますか [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) 印刷して見てください

すると、登録ユーザーのみが投票できると判断できます。そして投票終了後、次回投票する場合は修正時間を判定するだけです。

配列 ( [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)


Cookie は偽造可能であり、IP もユーザーによって制御可能です
これが理由かどうか見てみましょう

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


Cookie は偽造可能であり、IP もユーザーによって制御可能です
これが理由かどうか見てみましょう

ID もユーザーによって制御可能であるはずです


また、ID が増加すると、データベース内の時間レコードが減少することがあります。これは何ですか?

セッションと Cookie は偽造や消去が簡単すぎます。検証コードはどうなるのでしょうか?

セッション、Cookie、IP などの問題をすべて解決したとしても、認証コードがなければ簡単にスワイプされます

さまざまな方法でスワイプされる可能性があります。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。