现在有的防护是手机验证码和token验证,注册机注册的都是空号,却能收到验证码,也做了同一ip一小时注册一次,大神还有什么法子能防住
之前帮朋友写过一个,他们使用了一个在网上找的验证码生成程序,估计用的人太多了,竟然没防住。我个人比较喜欢JS去解决问题,最终使用本方案之后,就没有再出问题。
TokenCode,防止机器人模拟提交方式注册
TokenCode 使用演示脚本
<?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 < $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);
}
}
?>
调用方法:
<?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>';
?>
保存好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
};
});
注册机注册的都是空号,却能收到验证码
楼主能说明下吗,这是什么注册机,什么样的手机号?
我想到的方法
方法1.注册时再增加一层校验,比如:12306的图片选择、淘宝的滑动模块+背景图片
方法2.加生物检测,比如人脸识别、唇动检测, 生物检测通过后才真正创建用户,
国内的微众银行在它的app里已经使用了活体检测技术,不过这种技术目前主要还是应用在安全要求比较高的场景里,并且也只是作为辅助验证的手段,并不能100%依赖,总之效果还是不错的。
4 回答1.8k 阅读✓ 已解决
8 回答1.4k 阅读
3 回答1.4k 阅读✓ 已解决
2 回答1.6k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
4 回答2.4k 阅读
3 回答1.2k 阅读✓ 已解决
我我语文不太好,看不懂题目!