产生原因
因为新用户注册页面暴露在公开的网络环境中,任何人都可以调用该功能;部分违规软件会利用这一特点,会模拟人工大量获取短信验证码;
不利后果
因为软件可以高并发循环请求短信,所以会导致如下一些不利后果:
贵公司的的短信被大量恶意消耗;
因为短信是以贵公司名义发出的,所以会对贵公司的品牌造成一定的负面影响;
被骚扰的用户可能会进行投诉,会对贵公司的短信正常发送、短信通道安全稳定造成一定影响。
解决方案
除了贵公司在新用户注册页面做好必要防护之外,无线云通信平台也提供了如下一系列功能,帮助您降低短信验证码接口被刷的风险:
异常发送拦截:实时分析接口提交的每条短信的发送特征,如遇异常立即执行实时拦截,为您节约大量短信成本。
最大发送量设置:根据业务实际情况,设置账户每日最大短信发送量,达到设置的阈值后,系统暂停短信发送,并给管理员推送短信通知。
每号码每日最大发送量:可对单一手机号码的最大日发送量进行限制。
* 接口类型:触发短信接口,支持发送验证码短信、订单通知短信,节日祝福等。
* 账户注册:请通过该地址开通账户 http://user.ihuyi.com/?exClaO
* 注意事项:
*(1)调试期间,请使用用系统默认的短信内容:您的验证码是:【变量】。请不要把验证码泄露给其他人。
*(2)请使用 用户名 及 APIkey来调用接口,APIkey在会员中心可以获取;
*(3)该代码仅供接入短信接口参考使用,客户可根据实际需要自行编写;//开启SESSIONsession_start(); header("Content-type:text/html; charset=UTF-8"); //请求数据到短信接口,检查环境是否 开启 curl init。function Post($curlPost,$url){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_NOBODY, true); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost); $return_str = curl_exec($curl); curl_close($curl); return $return_str;} //将 xml数据转换为数组格式。function xml_to_array($xml){ $reg = "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/"; if(preg_match_all($reg, $xml, $matches)){ $count = count($matches[0]); for($i = 0; $i < $count; $i++){ $subxml= $matches[2][$i]; $key = $matches[1][$i]; if(preg_match( $reg, $subxml )){ $arr[$key] = xml_to_array( $subxml ); }else{ $arr[$key] = $subxml; } } } return $arr;} //random() 函数返回随机整数。function random($length = 6 , $numeric = 0) { PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000); if($numeric) { $hash = sprintf('%0'.$length.'d', mt_rand(0, pow(10, $length) - 1)); } else { $hash = ''; $chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789abcdefghjkmnpqrstuvwxyz'; $max = strlen($chars) - 1; for($i = 0; $i < $length; $i++) { $hash .= $chars[mt_rand(0, $max)]; } } return $hash;}//短信接口地址$target = "http://106.ihuyi.com/webservice/sms.php?method=Submit";//获取手机号$mobile = $_POST['mobile'];//获取验证码$send_code = $_POST['send_code'];//生成的随机数$mobile_code = random(4,1);if(empty($mobile)){ exit('手机号码不能为空');}//防用户恶意请求if(empty($_SESSION['send_code']) or $send_code!=$_SESSION['send_code']){ exit('请求超时,请刷新页面后重试');} $post_data = "account=用户名&password=密码&mobile=".$mobile."&content=".rawurlencode("您的验证码是:".$mobile_code."。请不要把验证码泄露给其他人。");//查看用户名 登录用户中心->验证码通知短信>产品总览->API接口信息->APIID//查看密码 登录用户中心->验证码通知短信>产品总览->API接口信息->APIKEY$gets = xml_to_array(Post($post_data, $target));if($gets['SubmitResult']['code']==2){ $_SESSION['mobile'] = $mobile; $_SESSION['mobile_code'] = $mobile_code;}echo $gets['SubmitResult']['msg'];