現在有的防護是手機驗證碼和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不能連續註冊
取得驗證碼的方式變一下。
使用語音的方式取得驗證碼。網頁上面填寫手機號碼以後,利用電話平台,給機主撥打語音電話。