PHP验证码CAPTCHA
我运行一个游戏网站,所以我有很多用户登录,他们可以每两分钟做一次.
我有一个CAPTCHA系统,有些东西它总是要求代码,而对于其他东西,它会每10分钟询问一次. 我有一些玩家在Opera上使用自动提交功能,而我的CAPTCHA系统确实阻止了它们. 我的问题是,如何最小化我要求代码的次数,但仍然阻止人们使用此自动提交?
如果我理解正确,这个任务不需要验证码.
我想你想看看用户是否点击了自己,坐在他的电脑前. 新想法 在您的表单上放置多个图像提交: <input type="image" name="send1" src="buttons.php?i=1" /> ... <input type="image" name="send8" src="buttons.php?i=8" /> 生成表单时获取1到8之间的随机数并将其保存在$_SESSION [‘submitnumber’]中. header("Content-Type: image/jpeg"); flush(); readfile($filename); 如果$_GET [i]!= $_ SESSION [‘submitnumber’]返回提交图像,则返回空图像. 如果单击了正确的图像提交,则接受表单(当用户单击按钮时,浏览器将发送类似send1X的coords) 这是一种验证码,但人们不会知道;) 老想法 你需要两件事: 1为非常独特的表单生成标记. put< input type =“hidden”name =“timertoken”value =“someweirdstring”/> 例: 这不是令牌机制的典型实现,但它就足够了. $token=generatesomerandomtext(); $_SESSION['token']=$token; //... somewhere later when outputing forms: echo '<input type="hidden" name="token" value="'.$token.'" />'; //and when it comes back: if($_POST['token']==$_SESSION['token']) { //it's ok } 这就是你需要的一切. 真正的表单令牌示例更像是这样的: //... somewhere later when outputing forms: echo '<input type="hidden" name="token" value="'.$token.'" />'; //and when it comes back: if( ($_POST['token']==md5($username.'some secret text'.$date.$timeRoundedTo10Minutes)) || ($_POST['token']==md5($username.'some secret text'.$date.$timeRoundedTo10Minutes-10minutes)) ) { //it's ok } 为什么用户名?因为它消除了使用一个用户的令牌来破解另一个用户的可能性 这是一个基本的例子.供参考,请参阅this问题. 2将提交按钮更改为< input type =“image”...,因为它会发布单击按钮的位置的x和y坐标.我不知道是谁在规范中提出这个问题,但这是第一次使用它! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |