在注册时检查被泄露的电子邮件,而无需亲自运行 HaveIBeenPwned
在存储之前捕获泄露的凭据。 单个 API 调用、Next.js 路由处理程序和 React Hook 表单验证器会增加 40 毫秒的注册延迟。
老用户在您的注册表中输入他们最喜欢的密码。 该密码在 2024 年 AT&T 转储、2023 年 23andMe 泄露事件以及 2022 年 LastPass 金库提取事件中泄露。 您存储哈希值,庆幸自己获得了 bcrypt,三周后,一个凭证填充机器人从巴西的住宅代理进入您的帐户。
修复很便宜。 注册时的一个 API 调用会告诉您该电子邮件是否出现在已知的违规语料库中。 使用该信号强制执行 MFA、要求更强的密码或将注册放入审核队列。 这篇文章展示了端点、Next.js 路由处理程序和 React Hook 表单验证器,这会增加大约 40 毫秒的注册延迟。
为什么在注册时而不是稍后进行违规检查
撞库之所以有效,是因为 65% 的用户在各个网站上重复使用密码(Google/Harris 2019,在 2023 年 Bitwarden 调查中重复)。 与 14 起先前违规行为相关的电子邮件并不是互联网的随机样本; 该用户将相同的密码交给了 14 个不同的泄密供应商。 他们在您的表格中输入相同内容的边际概率很高。
注册时检查会花费您一次往返费用。 接管后进行检查需要您支付支持票证、退款、信任和安全审查,并且通常还需要收到 GDPR 违规通知。 您希望在密码进入用户表之前而不是之后发出信号。
一次 API 调用,两个信号
POST /v1/breach/check 接受电子邮件或密码。 这是电子邮件电话。
以及显示在三个语料库中的地址的示例响应。
有两件事值得一提。 breach_count 和 breaches array 为您提供数据集名称、日期和总记录数; 他们不会返回暴露的密码、完整的泄露记录或您发送的任何 PII。 password_exposed 仅当您传递时才会填充 password 请求正文中的字段。 对于注册而言,仅电子邮件就足以对风险进行分级。
HaveIBeenPwned 的 k-anonymity API 可供个人免费使用,非常适合密码前缀查找。 在生产规模上,每个密钥每月支付 3.50 美元,并维持 SHA-1 前缀处理和客户端速率限制。 botoi 端点封装了该管道并添加了边缘缓存、与 API 其余部分的统一身份验证以及单个账单。
Next.js 路由处理程序
将调用放在您自己的路由后面,以便 API 密钥保留在服务器上。 使用 Zod 验证输入,添加 300 毫秒的 AbortController 超时,并在上游错误时失败打开,因此缓慢的违规检查永远不会阻止真正的注册。
一些值得命名的设计选择。 超时很紧(300ms),因为 P95 响应为 120ms,任何较慢的速度都是瞬态; 失败开放分支返回 risk: 'low' 因此,不稳定的第三方无法删除您的注册表单。 这 tier() 函数是唯一存在风险的地方,这使得以后重新调整变得困难。
客户端 React Hook 表单验证器
反跳 500 毫秒,这样您就不会在每次击键时触发请求。 不要阻止结果上的提交按钮; 显示警告并预切换 MFA。 警告转换; 硬块会让你失去用户。
将钩子连接到 React Hook Form 组件中。 这 watch 调用将电子邮件输入挂钩,结果会预先检查 MFA 框是否存在泄露地址。
如何处理结果
将违规计数转化为政策。 从这张表开始,并在您有两周的注册时间后进行调整。
| 违规次数 | 行动 | 用户体验 | 为什么 |
|---|---|---|---|
| 0 | 继续 | 没有变化 | 没有先前妥协的公开证据; 默认路径。 |
| 1-3 | 即时 MFA | 预先检查 MFA 框,显示软警告 | 每次泄露都会重复使用一个密码; 促使用户保护新帐户。 |
| 4-10 | 强制 MFA + 强密码 | 首次登录前需要注册 TOTP,最少 14 个字符 | 多次曝光表明该电子邮件存在于每个主要凭证列表中; 这里的弱密码意味着即将发生的接管。 |
| 10+ | 带摩擦力的软块 | 添加验证码或发送至人工审核 | 该电子邮件实际上是公开的。 在您创建帐户之前增加攻击者的成本。 |
在 120 毫秒内再叠加两次检查
仅通过违规检查就可以捕获重复使用密码的风险。 与它配对 /v1/disposable-email/check 标记临时邮件域和 /v1/vpn-detect 标记数据中心或 Tor 源 IP,并且您拥有一个在 P95 上并行运行时间低于 120 毫秒的三信号记分卡。 完整的评分模式(权重、阈值、审核日志记录)位于 通过 3 项 API 检查来阻止注册欺诈。
获取免费的 API 密钥: botoi.com/api/signup。 免费套餐涵盖每天 1,000 次违规检查(5 个请求/分钟突发),足以用于小型 SaaS 或通过端点重放过去 30 天的注册情况,并根据流失和滥用数据校准上述级别。
完整端点参考: 违规检查API。
FAQ
- 这是否会将电子邮件地址泄露给 botoi?
- 该电子邮件通过 TLS 访问 API,仅用于计算违规匹配。 请求主体不会保留在访问日志中; 仅方法、路径、状态和延迟会保留 30 天。 有关完整的数据处理语句,请参阅 API 文档。
- 典型的延迟是多少?
- Cloudflare Workers 边缘节点的响应时间中位数为 40 毫秒,第 95 个百分点为 120 毫秒。 本文中的处理程序设置了 300 毫秒的 AbortController 超时,因此缓慢的调用不会阻塞您的注册表单。
- 违规数据集有多新鲜?
- 数据集每周从公共转储同步(HIBP 跟踪的违规行为、撞库列表以及集合 #1 到 #5)。 新语料库会在公开披露后 7 天内出现。
- 可以直接查看密码吗?
- 是的。 将 SHA-1 前缀(前 5 个十六进制字符)或明文密码发布到同一端点。 对于客户端调用者来说,前缀形式更安全,因为完整的哈希值永远不会离开浏览器。 仅使用来自您的服务器的明文。
- 这符合 GDPR 规定吗?
- 违规检查是 GDPR 第 32 条(处理安全)规定的一项安全措施。 在您的处理活动记录中记录检查情况,在您的 DPA 中将 botoi 列为处理者,并记下合法依据(防止帐户被盗用的合法权益)。
开始使用 botoi 构建
150+ 个 API 端点,涵盖查询、文本处理、图片生成和开发者工具。免费套餐,无需信用卡。