一次性验证码的安全性取决于其生成、存储和速率限制方式。Bird Verify 使用加密随机源生成验证码,仅存储哈希值,采用恒定时间比较,并对发送次数和猜测次数设上限——因此,即使日志泄露或遭遇暴力破解,攻击者也无从得手。欺诈评分功能即将在此基础上推出。
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
// Send the code, then check it by recipient.
await bird.verify.verifications.create({
to: { phone_number: "+15551234567" },
}).safe();
const { data } = await bird.verify.verifications.check({
to: { phone_number: "+15551234567" },
code: userInput,
}).safe();安全性默认启用,无需额外购买。
Bird Verify API 上的每次验证都具备相同的保护:验证码在服务端生成,永不返回明文,仅以哈希形式存储;比较采用恒定时间且受限于尝试次数预算;发送按接收者和工作空间设上限。这些无需您手动启用或配置——无论您将其用作双因素登录还是无密码登录,API 始终如此运行。
每次验证均具备五重保护。
无需设置步骤,无需额外购买。
- 01
加密随机生成。
验证码源自加密随机源,在整个码空间内均匀分布,而非可预测的计数器或时间戳。
- 02
静态哈希存储,明文永不外传。
仅存储每个验证码的 HMAC-SHA256 哈希值;明文永远不会通过 API 返回,也不会写入您的系统或我们的日志。
- 03
恒定时间比较。
提交的验证码采用恒定时间比较,攻击者无法从验证耗时中获取任何信息。
- 04
尝试次数锁定。
每个会话的验证次数有限(默认 5 次)。次数用完后会话即失败,暴力猜测无法无限进行。
- 05
发送上限与配额。
按接收者的发送上限、重发冷却时间以及按工作空间的每日配额,共同限制支出和攻击面,超限时返回 429 状态码及 Retry-After 头。
攻击者的尝试次数先于您的用户耗尽。
错误验证码会返回剩余尝试次数,预算耗尽后会话即失败——暴力破解撞上的是一堵墙,而非一扇敞开的门。
const { data } = await bird.verify.verifications.check({
to: { phone_number: "+15551234567" },
code: guess,
}).safe();
// wrong code, attempts left → { result: "invalid", attempts_remaining: 2 }
// budget spent, session done → { result: "failed", attempts_remaining: null }即将推出:欺诈信号与 SMS 泵送攻击防护。
Bird Verify 目前记录的每次发送历史,是我们正在构建的欺诈防护层的基础。它使用相同的 create 和 check 调用——因此后续启用只需更改配置,无需重新集成。
创建时的风险信号。在验证请求中传入设备、IP 和请求上下文,高风险尝试在发送验证码之前即被拦截——您无需为向攻击者发送消息买单。
SMS 泵送与 AIT 防护。按国家和号段前缀的发送上限,加上按工作空间的消费上限,可阻止人为虚增流量攻击——这种攻击将 OTP 发送至高费号段以获取运营商收入分成。
基于现有基础构建。风险决策读取 Bird Verify 从第一天起就保存的尝试历史,而拦截结果已是状态模型的一部分——因此欺诈防护层的上线不会改变您现有的集成方式。