用户
 找回密码
 入住 CI 中国社区
搜索
查看: 525|回复: 0
收起左侧

PHP短信验证码防刷方案

[复制链接]
发表于 2023-4-11 11:21:02 | 显示全部楼层 |阅读模式
本帖最后由 宙哈哈 于 2023-4-11 11:21 编辑

前言
短信验证码是通过发送验证码到手机的一种有效的验证码系统。利用短信验证码来注册会员,大大降低了非法注册的数据。
下面是我在项目开发中,对防止恶意或者无意刷新验证码做的解决方案笔记。
2.png


时间限制
例如30秒后才能再次发送。点击发送短信验证码后,客户端开始30秒倒计时,限制用户在这时间内多次的发送获取短信验证码的请求。虽然这种方法比普遍,但通过特定方式可以绕过这个限制,直接发送短信验证码。

手机号限制
针对同一个手机号进行注册或其它发送短信验证码的操作时,系统可以对该手机号进行限制。例如指定时间内只能发送5条短信验证码,超出则提示请稍后再试。

接入图形验证码
客户端发送短信验证码前,接入图形验证码,让用户验证。向服务端提交一个Token参数,服务端对这个Token参数进行验证,验证通过之后,再向请求发送短信的接口向用户手机发送短信。
1.PNG


前端接入代码
HTML复制代码
<script src="captcha.js?appid=xxx"></script>
<script>
kg.captcha({
    // 绑定弹窗按钮
    button: "#captchaButton",
    // 验证成功事务处理
    success: function (e) {
        // 验证成功,直接提交表单
        // form1.submit();
        kg.$("#kgCaptchaToken").value = e["token"];
        console.log(e);
    },
    // 验证失败事务处理
    failure: function (e) {
        console.log(e);
    },
    // 点击刷新按钮时触发
    refresh: function (e) {
        console.log(e);
    }
});
</script>
<a id="captchaButton">点击弹出验证窗口</a>
<input type="hidden" name="kgCaptchaToken" value="" />
复制代码

PHP代码
PHP复制代码
<?php
include "public/KgCaptchaSDK.php";
// 填写你的 AppId,在应用管理中获取
$appId = "AppId";
// 填写你的 AppSecret,在应用管理中获取
$appSecret = "AppSecret";
$request = new kgCaptcha($appId, $appSecret);
// 填写应用服务域名,在应用管理中获取
$request->appCdn = "appCdn";
// 前端验证成功后颁发的 token,有效期为两分钟
$request->token = $_POST["kgCaptchaToken"];
// 当安全策略中的防控等级为3时必须填写
$request->userId = "kgCaptchaDemo";
// 请求超时时间,秒
$request->connectTimeout = 10;
$requestResult = $request->sendRequest();
if ($requestResult->code === 0) {
    // 验签成功逻辑处理
    echo "验证通过";
} else {
    // 验签失败逻辑处理
    echo "验证失败,错误代码:{$requestResult->code}, 错误信息:{$requestResult->msg}";
}
复制代码

短信预警
当短信验证码请求达到一定数量时,向管理员发送预警消息,管理员可以立即进行监控和保护。

最后
SDK开源地址:https://github.com/KgCaptcha,顺便做了一个演示:https://www.kgcaptcha.com/demo

本版积分规则