1. 程式人生 > >如何防止簡訊驗證被盜刷

如何防止簡訊驗證被盜刷

      在php聊天群裡,有位同學說 他們的5000塊錢的簡訊,兩天被刷完了!,問群裡大佬怎麼辦!

就一般的防止簡訊驗證盜刷而言(通過修改手機號修改驗證碼),我們通常的防止簡訊被濫發,就是

(1)限制每個手機號的傳送次數

類似:

//檢查傳送次數
$key = "mobileReg_sms_send_times:" . $mobile . ":" . date("Ymd");
$smsSendTimes = Yii::app()->redis->get($key);
if (empty($smsSendTimes)) {
    $smsSendTimes 
= 0; } else if ($smsSendTimes >= 10) { $this->_end(1, '每個手機號每天最多能發10條簡訊!'); }
但是如果人家通過修改手機號呢,這時候我們就引入了通過ip,來限制ip

(2)通過ip限制

//檢查IP傳送次數
$keyIp = "mobileIpReg_sms_send_times:" . PublicFunHelper::getIP() . ":" . date("YmdH");
$smsIpSendTimes = Yii::app()->redis->get($keyIp);
if (empty($smsIpSendTimes
)) { $smsIpSendTimes = 0; } else if ($smsIpSendTimes >= 5) { $this->_end(1, '您獲取簡訊驗證過於頻繁,請稍後再試!'); }

(3)驗證 檢測同一個簡訊傳送驗證時間

//檢查是否相隔60秒後傳送
$limitKey = "mobileReg_sms_send_limit:" . $mobile;
$smsSendLimit = Yii::app()->redis->get($limitKey);
if ($smsSendLimit) {
    $this->_end(1, 
'60秒後才能重新發送簡訊驗證碼!'); }

以上這3個條件篩選對於一般的刷簡訊防護應該是已經夠了!但是群裡那位同學這3個驗證條件都加了,依然還是被刷爆了,接下來又該怎麼處理呢?(攻擊的機制是通過修改手機號)

群裡各位給出的方案

1 提交修改是再加一個驗證碼的 驗證(個人比較看好這種方案);

2 限制同一個賬戶 一天修改手機號的次數

3 在修改之前,再重新登入使用者名稱和密碼

感謝群裡各位大佬。。。。