欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

如何防止网站被注册机轰炸

程序员文章站 2022-05-05 22:50:14
...
现在有的防护是手机验证码和token验证,注册机注册的都是空号,却能收到验证码,也做了同一ip一小时注册一次,大神还有什么法子能防住

回复内容:

现在有的防护是手机验证码和token验证,注册机注册的都是空号,却能收到验证码,也做了同一ip一小时注册一次,大神还有什么法子能防住

我我语文不太好,看不懂题目!

之前帮朋友写过一个,他们使用了一个在网上找的验证码生成程序,估计用的人太多了,竟然没防住。我个人比较喜欢JS去解决问题,最终使用本方案之后,就没有再出问题。

TokenCode,防止机器人模拟提交方式注册
TokenCode 使用演示脚本

 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);
        }
         
    }
?>

调用方法:

 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不能连续注册

获取验证码的方式变一下。
使用语音的方式获取验证码。网页上面填写手机号以后,利用呼叫平台,给机主拨打语音电话。

相关标签: php mysql