
接短信验证码这件事,最贵的不是短信费,是被刷。一个没做防护的验证码接口,被人用脚本刷一晚上,第二天账单能上千块。选接口的时候,防刷能力比价格重要得多。
先算清楚一条短信多少钱
国内短信的单价大概三分到五分一条,量大能谈到两分多。看着便宜,但架不住量大。
一个正常用户的注册流程平均发一到两条。如果你的日注册是一百人,一天两三百条,一个月也就几十块钱,这个量级完全不用担心。
真正的问题是异常流量。被刷的时候,一晚十万条很常见,按四分算就是四千块。而且刷的人不会只刷一次,会持续好几天。
所以预算不能只看正常量,要留出被刷的余量,或者干脆靠防护把异常挡在外面。
选接口要看哪几项
第一项是到达率。不同服务商在不同省份、不同运营商的到达率差很多。别看宣传页上的百分之九十九,要自己实测,挑几个省份的号码各发几条看看。
第二项是速度。正常应该在五秒内到达,超过三十秒基本等于失败,用户早就关页面了。
第三项是接口稳定性。有的服务商高峰期会限流,发不出去还扣钱。要问清楚并发上限是多少。
第四项是模板报备。国内短信必须提前报备模板,模板不通过发不出去。服务商的报备流程快不快,直接影响你上线的时间。
第五项是签名。签名就是短信开头那个方括号里的名字,必须是已经备案的,随便写会被运营商拦掉。
防刷的第一层:频率限制
最基本的三条限制:同一手机号一分钟只能发一条,一小时不超过五条,一天不超过十条。
同一 IP 的限制要更严,因为刷的人往往用同一个 IP 批量发。建议同一 IP 一小时不超过二十条。
同一个设备也要限制。有些刷子会换 IP 但设备标识不变,抓设备维度能挡住一部分。
这些限制要写在服务端,不能只在前端做。前端限制随手就能绕过,等于没做。
限制被触发时的返回信息要注意,别直接告诉对方“你被限制了”。统一返回一个模糊的提示,减少对方试探的空间。
防刷的第二层:人机验证
发验证码之前先过一道人机验证。图形验证码、滑块、点选,任选一种,成本很低,能挡掉大部分脚本。
现在流行的无感验证更好,用户基本不用操作,后台根据行为特征判断。缺点是接入要多几步,小站用普通图形码就够。
还有一种是行为验证,比如要求填写一个简单的算术题。这类对老年人不友好,看你的用户群。
验证通过后给一个短期的凭证,比如五分钟内有效的一次性 token,发短信时校验这个 token。这样别人直接调接口是调不通的。
这一层是防刷的核心,很多站省掉这一步,结果就是被刷得很难看。
防刷的第三层:号码和内容校验
号码要做基本校验。长度、号段是否符合规则,明显是乱填的直接拒掉,不用发。
要识别虚拟号段和接码平台。这类号码专门用来收验证码,批量注册的都用它们。维护一份黑名单,定期更新。
同一个号码在短时间内被多个账号使用,要标记出来。正常的号码不会一天收十次验证码。
内容上别在短信里放链接。带链接的短信被运营商拦截的概率高,而且容易被判营销短信。
验证码有效期设短一点。五分钟足够用户操作,超过就失效。有效期太长等于给对方更多时间试。
被刷了怎么应急
第一件事是止血。立刻把发短信的接口临时关掉,或者把限制调到最严,比如同一 IP 一天只能发三条。
第二件事是查来源。看日志里这些请求的 IP 分布,如果集中在少数几个 IP 或者几个号段,直接封。
第三件事是评估损失。看服务商后台的实际发送量,算清楚这一波花了多少钱,有没有超出预算。
第四件事是补漏洞。多半是缺了人机验证,或者限制太松。补上之后再逐步放开限制,边放边观察。
还有,如果刷的量特别大,联系服务商。正规服务商有异常流量保护,能帮你临时拦截。
成本控制的实际做法
按业务分层。注册、登录这类高频场景用便宜的通道,重要的通知(比如订单、密码修改)用贵的但更稳的通道。
能不发就不发。用户已经登录的情况下,改密码不一定要发短信,可以用邮件或者站内确认。少发一条省一条。
设每日预算上限。服务商后台一般有这个功能,超过就停发,避免账单失控。
定期核对账单和日志。看有没有对不上的发送记录,有些不规范的服务商会多计费。
如果量真的很大,可以谈阶梯价。月发送量到十万以上,单价能降不少,主动去谈比等对方开口强。
备用通道要不要准备
要。单一服务商出故障的时候,你的注册和登录会直接停摆。准备一条备用通道,主通道失败时自动切换。
切换逻辑要简单:主通道调用返回失败或者超时,立刻用备用通道重发一次。别搞复杂的判断,越简单越可靠。
两条通道用不同的服务商,别用同一家的两个产品,一家出问题两个一起挂。
备用通道的模板也要提前报备,别等真要用的时候才发现没报备,发不出去。
定期做一次切换测试。半年测一次,确认备用通道还能用。不测的话,等真需要时大概率是坏的。
合规上要注意什么
短信内容必须和报备的模板一致。改了文案要重新报备,别改了直接发,会被拦截。
签名必须是你自己的,不能借用别人的。签名和你的主体要对得上,不然审核过不了。
不能发营销内容。验证码短信里夹带促销信息,属于违规,被查到会被停通道。
用户手机号属于个人信息,存储和使用都要有依据。别把号码拿去二次利用,也别长期明文存着。
发送记录建议保留一段时间,出问题时能查。保留多久看你所在行业的规则,一般至少半年。
