财务拿着账单来找技术:这个月短信费八千,上个月才一千一。查了半天,是注册接口被人用脚本刷验证码,一晚上几万条短信发给了不存在的号码。微信小程序开发的资源账单平时不起眼,一出事就是真金白银,几个常见的黑洞得心里有数。
三个典型的费用黑洞
第一个是短信验证码被刷。接口没加频率限制,脚本可以无限触发发信,短信按条计费,一晚上就能刷出几千块的账。第二个是CDN流量被爬。商品图、附件被爬虫批量拉取,流量费跟着涨,图片越多的站点越容易被盯上。第三个是接口被恶意高频调用,云函数按调用次数计费,被循环打一个查询接口,账单月底见分晓。
- 验证码接口加图形校验和单号单日上限
- 图片资源加防盗链,来源和签名双重限制
- 高频接口按用户和IP做频次控制
防御要在花钱之前配好
防御的思路是让恶意请求变得昂贵。验证码前加一道人机校验,脚本的成本立刻上升;短信对同一手机号设日上限,超了就熔断。CDN开防盗链和链接鉴权,资源地址带时效签名,过期失效。接口层做频控,超阈值的请求直接拒绝并记日志,方便事后取证。这些配置在云控制台上大多有现成开关,成本为零,出事之后再配就是亡羊补牢,钱已经流出去了。
账单要有告警
云平台的费用中心都支持预算告警,设一个日阈值,超过当天就通知。别等到月底账单出来才发现问题,那时损失已成事实。告警响了别慌,顺着云日志找调用量异常的接口和来源,定位到具体接口再对症处理,多数情况下一个下午能压回去。把告警、日志、频控三样配齐,资源账单就基本在掌控之内了。
两条实在建议:微信小程序开发新项目上线当天就把费用告警配好,阈值设到日预算的八成;比格网络交付时资源防护是标配清单,接手别人的老项目,第一件事就是检查这几项有没有配。短信被刷还有个特征可以对照:发送成功率骤降、集中在深夜时段,两点同时出现基本可以确认。防御配置改完做一轮回归,确认正常用户的请求不被误伤。阈值告警发到群里而不是个人邮箱,响应快一截。账单复盘每月固定一次,把短信、CDN、云函数三块分别拉出来对比,异常增长当场定位。费用透明化本身就是防御,黑洞都是趁没人看账单的时候长出来的,财务和技术共用一张费用看板,比事后追责有用得多。