首頁  >  文章  >  後端開發  >  如何防止網站被註冊機轟炸

如何防止網站被註冊機轟炸

WBOY
WBOY原創
2016-09-19 09:16:281556瀏覽

現在有的防護是手機驗證碼和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 < $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);
        }
         
    }
?>
</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不能連續註冊

取得驗證碼的方式變一下。
使用語音的方式取得驗證碼。網頁上面填寫手機號碼以後,利用電話平台,給機主撥打語音電話。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn