学习与交流:
phpstorm全家桶激活码,支持多台电脑,支持多个IDE工具 链接:http://web.52shizhan.cn/activity/fot8dn 提取码:KGYU508TG4 大部分产品都会涉及到短信验证码的使用界面,尤其是手机产品,短信验证码几乎已经成为所有手机产品的标准。因此,防止短信被刷成了每个产品经理和开发人员关心的问题。
没有体验过短信被刷问题的产品经理可能不会太注意这个问题。在这篇文章中,我将简要介绍黑色工具的短信轰炸机。短信轰炸机是一个软件,使用书面程序刷短信大量。它可以自动批量提交手机号码,模拟IP等方式刷短信。
因此,在设计需要使用短信验证码的产品时,必须制定限制规则,避免短信被闪现。
在PC时代,大多数平台通过图形验证码的形式降低了被机器刷过的风险。最典型的例子是12306“奇妙的验证码”。然而,在移动互联网时代,用户体验非常重要,有时使用图形验证码会对用户体验产生一定的影响。那么,除了图形验证码的方式外,还有什么方法可以解决短信被刷的问题呢?
提供了几种方案仅供参考:思路都在,代码就容易实现咯 1、时间限制:60秒后才能再次发送
从发送验证码开始,前端(客户端)将执行60秒的倒计时。在这一分钟之内,用户无法提交多个发送信息的请求。尽管通常使用此方法,但它不是很有用。技术更好的人可以绕过此限制,直接发送短信验证码。
代码如下://检查是否相隔60秒后发送
$limitKey = "mobile_sms_send_limit:" . $mobile;
$smsSendLimit = Yii::app()->redis->get($limitKey);
if ($smsSendLimit) {
$this->_end(1, '60秒后才能重新发送短信验证码!');
}2.手机号码限制:同一手机号码24小时内不能超过5条
当使用同一手机号码进行注册或其他发送短信验证码的操作时,系统可以对手机号码进行限制。 例如,24小时内只能发送5个电子邮件验证码。 如果超出限制,会报错(例如:忙,请稍后重试)。 此外,这只能防止垃圾邮件。 这种方法对于使用不同手机号码批量发送邮件的电脑来说没有帮助。
代码如下所示:
//检查发送次数
$key = "mobile_sms_send_times:" . $mobile . ":" . date("YmdHis");
$smsSendTimes = Yii::app()->redis->get($key);
if (empty($smsSendTimes)) {
$smsSendTimes = 0;
} else if ($smsSendTimes >= 5) {
$this->_end(1, '每个手机号每天最多能发5条短信!');
}3.短信验证码限制:30分钟内发送相同的验证码
网上还有一个办法:30分钟内,发送的所有邮件验证码都是同一个验证码。 首次请求短信接口,然后缓存邮件验证码结果。 如果30分钟内再次请求,将直接返回缓存内容。 对于这种方法,尚不清楚mailsocket提供商是否会为发送缓存消息付费。 如果您有兴趣,可以了解一下。
部分代码如下:
<?php
//这里判断是否存在短信缓存
if(Cache::get('codeCache') != null){
//短信30分钟内存在,则继续发同一条短信给用户
$code = Cache::get('codeCache');
//接下来把code发给用户的业务操作
。。。
}else{
//接收短信验证码
$code = $this->smsTplTrait() //假如这里作为接收到短信"562334"
//将接收到的code存在Cache里30分钟
Cache::put('codeCache', $code, 30);
}
?>4.前端及前端标定:提交Token参数标定
这些方法很少被提及,我个人认为这样的方法值得一试。 后端(客户端)请求发送邮件时,同时向服务器提交一个Token参数,服务器对Token参数进行校准。 校准通过后,通过请求发送邮件的socket向用户手机发送邮件。
5、唯一性限制:Momo产品限制具有相同Momo ID的用户的请求数量
如果是Momo产品php短信发送,可以通过Momo ID来识别。 之后,同一Momo ID的用户在24小时内最多只能发送10封电子邮件。
6、产品工艺限制:分步
例如,对于使用邮箱验证码进行注册的情况,我们将注册步骤分为两步。 用户输入手机号码并设置密码后,下一步就进入验证码验证步骤。
7、图形验证码控制:图形验证通过后请求socket
图形验证码的前后端交互过程比较简单,主要分为以下三个步骤:
1)客户端请求页面时,向服务器发起请求,服务器生成验证码,并将验证码的字符存储到Session中,用于客户端的校验。 同时服务器将生成的验证码图形发送至后端;
2)后端获取验证码图形,渲染并显示在页面上。 用户识别图形验证码后,将验证码的字符提交给服务器;
3)服务器接收到验证码校准请求,将接收到的字符与会话中存储的验证码字符进行比对,并将比对结果返回给后端。
部分后端代码
<p class="form-group col-lg-6">
<label for="id" class="col-sm-4 control-label"> 验证码: </label>
<p class="col-sm-8">
<input type="text" id="code" name="code" class="form-control" style="width:250px;" />
<img id="imgObj" alt="验证码" src="/article/getValidateCode" οnclick="changeImg()" />
<a href="#" οnclick="changeImg()">换一张</a>
</p>后端部分代码 <?php
/**
* 这里是判断获取的code与存在session的code是否一致,一致则进入下一步,发短信验证码
* 1 首先要处理的是前端要获取从后端响应过去的code,所以php后端要有生成验证码的代码,生成session,并且响应给前端用
* 2 前端获取到code后与session做比较
*/
public function checkCode(Request $request)
{
$code = $request->input('code');
if($code == SESSION['getCode']){
//这里就是通过验证码后,接下来发送短信的业务逻辑,根据自己的业务需要把
$consignee_content = $this->smsTplTrait('consignee_order', 1); //查找短信模板
$consignee_content = sprintf($consignee_content);
$this->sendSmsTrait($consignee_content, '', 1); //发送短信
}else{
response(['status'=>'0' ,'message' => '验证码有误,无法发送短信']);
}
}
?>8. IP和Cookie限制:限制相同IP/Cookie信息的最大数量
使用cookie或IP,您可以轻松识别同一用户,然后限制同一用户(例如,您最多只能在24小时内发送20封电子邮件)。 并且,cookie可以被清除,IP可以被模拟,而且IP也可以在局域网内有相同的IP。 因此,在使用该方法时,应考虑具体情况。
代码如下所示:
//检查IP发送次数
$keyIp = "mobileIp_sms_send_times:" . PublicFunHelper::getIP() . ":" . date("YmdHis");
$smsIpSendTimes = Yii::app()->redis->get($keyIp);
if (empty($smsIpSendTimes)) {
$smsIpSendTimes = 0;
} else if ($smsIpSendTimes >= 20) {
$this->_end(1, '您获取短信验证过于频繁,请稍后再试!');
}9.短信预警机制,出现问题后做好保护
上述方法可能很难完全避免邮件被盗刷。 为此,我们还应该对电子邮件实施良好的预警机制,即当电子邮件剂量达到一定量时php短信发送,会向管理员发送预警消息,管理员可以立即对电子邮件接口进行监控和保护。
原文链接:
以上就是本文的全部内容,希望各位程序员努力提高个人技能。 最后,小编温馨提醒:每晚读书5分钟,每晚学习一点,每晚进步一点。
点个赞
我们走吧