// 堆代码 duidaima.com var data = {"operation":1,"is_voice":false,"mobile_number":"17762019988","captcha_type":2}; for (var i = 0; i < 10; i++) { $.ajax({ type: 'POST', contentType: 'application/json;charset=UTF-8', data:JSON.stringify(data), url: 'https://portal.qiniu.com/api/gaea/verification/sms/send', success: function(data) { console.log(data) } }); }控制台返回以下信息,前三次请求成功,后面的就出现了验证码校验并进行了限流操作。
{"code":200,"message":""} {"code":200,"message":""} {"code":200,"message":""} {"code": 7209,"message":"captcha required"} {"code": 7209,"message":"captcha required"} {"code": 429,"message":"too many requests"} {"code": 429,"message":"too many requests"} {"code": 429,"message":"too many requests"} {"code": 429,"message":"too many requests"} {"code": 7209,"message":"captcha required"}我尝试刷新页面,随便输了一个手机号,再次点击发送,提示用户输入验证码,显然是加强了防备,触发了恶意请求认证拦截机制。
7.如果后台不做限制,切记前台一定要做个倒计时的限制,至少过滤一部分小白用户。
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; public class Mobile { /** * 堆代码 duidaima.com * 测试方便,这里设置了3秒失效 */ private static LoadingCache<String, String> caches = CacheBuilder.newBuilder() .maximumSize(1000) .expireAfterWrite(3, TimeUnit.SECONDS) .build(new CacheLoader<String, String>() { @Override public String load(String mobile) { return ""; } }); public static void main(String[] args) throws ExecutionException, InterruptedException { Integer code = (int)((Math.random()*9+1)*100000); caches.put("17762018888",code.toString()); System.out.println(caches.get("17762018888")); Thread.sleep(4000); System.out.println("是不是没了:"+caches.get("17762018888")); } }