现在有的防护是手机验证码和token验证,注册机注册的都是空号,却能收到验证码,也做了同一ip一小时注册一次,大神还有什么法子能防住
现在有的防护是手机验证码和token验证,注册机注册的都是空号,却能收到验证码,也做了同一ip一小时注册一次,大神还有什么法子能防住
我我语文不太好,看不懂题目!
之前帮朋友写过一个,他们使用了一个在网上找的验证码生成程序,估计用的人太多了,竟然没防住。我个人比较喜欢JS去解决问题,最终使用本方案之后,就没有再出问题。
TokenCode,防止机器人模拟提交方式注册
TokenCode 使用演示脚本
<code><?php #===================================================================== #= Copyright (c) 2015 猫七(QQ:77068320) = #= All rights reserverd. = #===================================================================== #= TokenCode 防模拟提交程序 类(PHP版本) = #= 使用说明:http://www.miaoqiyuan.cn/products/tokencode/last.zip = #= 演示地址:http://www.miaoqiyuan.cn/products/tokencode/ = #= 使用说明:http://www.miaoqiyuan.cn/p/tokencode = #= 邮箱地址:mqycn@126.com QQ:77068320 1301425789 = #===================================================================== class TokenCode { public $value, $code ; public $OperationList; public function __construct() { $resultValue = $this -> RandomKey($this -> RandomIntger()); $resultCode = "'" . $resultValue . "'"; $this -> OperationList = Array("+", "-" ,"*"); for( $i = 0 ; $i RandomIntger() + 3; $i++){ $op = $this -> RandOperation(); switch($op){ case "+": case "-": $random = $this -> RandEquations(); $resultValue .= $random["value"]; $resultCode .= "+(" . $random["code"] . ")"; break; default: $random = $this -> RandomKey($this -> RandomIntger()); $resultValue .= $random; $resultCode .= "+'" . $random . "'"; break; } } $rnd1 = $this -> RandomIntger(); $rnd2 = $this -> RandomIntger() + 8; $this -> value = substr($resultValue, $rnd1, $rnd2); $this -> code = "(" . $resultCode . ").substring(" . $rnd1 . "," . ($rnd1 + $rnd2) . ")"; } private function RandEquations(){ $va = $str = $this -> RandomLong(); $this -> OperationList = Array("+", "-" ,"*"); for( $i = 0 ; $i RandomIntger(); $i++){ $op = $this -> RandOperation(); $vb = $this -> RandomLong(); switch($op){ case "+": $va += $vb; $str .= "+" . $vb; break; case "-": $va -= $vb; $str .= "-" . $vb; break; case "*": $va *= $vb; $str = "(" . $str . ")*" . $vb; break; } } return Array( "code" => $str, "value" => $va ); } private function RandOperation(){ return $this -> OperationList[rand() % count($this -> OperationList)]; } private function RandomIntger(){ return (int)substr(rand(), 1, 1) + 1; } private function RandomLong(){ return (int)substr(rand(), 1, 3) + 1; } private function RandomKey($len = 10){ return substr(md5(rand()), 1, $len + 5); } } ?> </code>
调用方法:
<code><?php require("TokenCode.php"); $token = new TokenCode(); $tokenValue = $token -> value ; $tokenCode = $token -> code ; //代码段 $_SESSION["_TOKENCODE"] = $token -> value ; //代码段 echo '<script type="text/javascript">_TOKENCODE=' . $token -> code . ';</script>'; ?></code>
保存好session后,到验证页验证提交的code和验证结果即可,程序改动非常少,只需要js改动一下即可。
<code>#AJAX方式 $.post("/", {mob : $("#mob").val() , token : _TOKENCODE }, function(){ } ); #URL方式 $("#send").click(function(){ if(this.href.indexOf('&token=')==-1){ this.href+='&token=' + _TOKENCODE }; });</code>
ip限制加高强度验证码
用的是虚拟号码注册的吧?
注册机注册的都是空号,却能收到验证码
楼主能说明下吗,这是什么注册机,什么样的手机号?
我想到的方法
方法1.注册时再增加一层校验,比如:12306的图片选择、淘宝的滑动模块+背景图片
方法2.加生物检测,比如人脸识别、唇动检测, 生物检测通过后才真正创建用户,
国内的微众银行在它的app里已经使用了活体检测技术,不过这种技术目前主要还是应用在安全要求比较高的场景里,并且也只是作为辅助验证的手段,并不能100%依赖,总之效果还是不错的。
做验证码或者添加IP限制,相同IP不能连续注册
获取验证码的方式变一下。
使用语音的方式获取验证码。网页上面填写手机号以后,利用呼叫平台,给机主拨打语音电话。