现在有的防护是手机验证码和token验证,注册机注册的都是空号,却能收到验证码,也做了同一ip一小时注册一次,大神还有什么法子能防住
我我语文不太好,看不懂题目!
之前帮朋友写过一个,他们使用了一个在网上找的验证码生成程序,估计用的人太多了,竟然没防住。我个人比较喜欢JS去解决问题,最终使用本方案之后,就没有再出问题。
TokenCode,防止机器人模拟提交方式注册
TokenCode 使用演示脚本
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 < $this -> 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 < $this -> 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);
}
}
?>
调用方法:
value ;
$tokenCode = $token -> code ;
//代码段
$_SESSION["_TOKENCODE"] = $token -> value ;
//代码段
echo '';
?>
保存好session后,到验证页验证提交的code和验证结果即可,程序改动非常少,只需要js改动一下即可。
#AJAX方式
$.post("/", {mob : $("#mob").val() , token : _TOKENCODE }, function(){ } );
#URL方式
$("#send").click(function(){
if(this.href.indexOf('&token=')==-1){
this.href+='&token=' + _TOKENCODE
};
});
ip限制加高强度验证码
用的是虚拟号码注册的吧?
注册机注册的都是空号,却能收到验证码
楼主能说明下吗,这是什么注册机,什么样的手机号?
我想到的方法
方法1.注册时再增加一层校验,比如:12306的图片选择、淘宝的滑动模块+背景图片
方法2.加生物检测,比如人脸识别、唇动检测, 生物检测通过后才真正创建用户,
国内的微众银行在它的app里已经使用了活体检测技术,不过这种技术目前主要还是应用在安全要求比较高的场景里,并且也只是作为辅助验证的手段,并不能100%依赖,总之效果还是不错的。
做验证码或者添加IP限制,相同IP不能连续注册
获取验证码的方式变一下。
使用语音的方式获取验证码。网页上面填写手机号以后,利用呼叫平台,给机主拨打语音电话。