问答 / 1 / 10 / 创建于 3年前
如何防止短信接口被爆破?大家有没有什么好的思路
验证码
就常规套路,验证码,同一个 IP 1 分钟一次,多次爆破加黑名单。
图片验证码 + 接口节流
同一用户(IP,手机号,session_id),一定时间内次数限制。
但一定要考虑并发,不然白搭。
$mobile = trim(input('mobile')); $fp = fopen("./locksms{$mobile}.txt", "w+");//乞丐版的并发限制,用文件锁实现 if (flock($fp, LOCK_EX)) { $ip = $this->request->ip(); $today = date('Y-m-d 00:00:00'); $log_ip_today = db('sms_log')->where(['ip' => $ip])->where('create_time', '>', $today)->count(); $log_mobile_today = db('sms_log')->where(['mobile' => $mobile])->where('create_time', '>', $today)->count(); if ($log_ip_today > 10 || $log_mobile_today > 10) { flock($fp, LOCK_UN); fclose($fp); return json(['code' => 0, 'msg' => '你今天发送过多的验证码']); } $seconds_ago = date('Y-m-d H:i:s', time() - 60); //同一手机号发送验证码至少间隔一分钟 $last = db('sms_log')->where(['mobile' => $mobile])->where('create_time', '>=', $seconds_ago)->count(); if ($last > 0) { flock($fp, LOCK_UN); fclose($fp); return json(['code' => 0, 'msg' => '验证码发送过于频繁']); } //发送短信,,, //成功后把发送记录写入数据表`sms_log`中 } else { return json(['code' => 0, 'msg' => '请重试']); }
验证码 同一个ip限制 短信验证有效期 (5分分钟只能获取一次) 在一个同一个手机号按小时和天设置阈值(比如一天最多获取五次等) 不过阿里的大鱼短信 就本身可以设置频率
很多应用的做法是发送短信验证码设置时间间隔,一般1分钟内只发送一次等
如果是API端口, 直接用这个不就好了?路由《Laravel 8 中文文档》
验证码,弄滑块验证码,像极致验证,腾讯防水墙,都是比较难破解的,然后ip,客户端限流
只有用验证的方式,没别的办法,ip,手机号别人都可以伪造的
我要举报该,理由是:
验证码
就常规套路,验证码,同一个 IP 1 分钟一次,多次爆破加黑名单。
图片验证码 + 接口节流
同一用户(IP,手机号,session_id),一定时间内次数限制。
但一定要考虑并发,不然白搭。
验证码 同一个ip限制 短信验证有效期 (5分分钟只能获取一次) 在一个同一个手机号按小时和天设置阈值(比如一天最多获取五次等) 不过阿里的大鱼短信 就本身可以设置频率
很多应用的做法是发送短信验证码设置时间间隔,一般1分钟内只发送一次等
如果是API端口, 直接用这个不就好了?路由《Laravel 8 中文文档》
验证码,弄滑块验证码,像极致验证,腾讯防水墙,都是比较难破解的,然后ip,客户端限流
只有用验证的方式,没别的办法,ip,手机号别人都可以伪造的