文档
把采集脚本加到注册页面,从服务器调用一个接口,再根据决定处理。
快速开始
1. 在注册页面加入采集脚本
它会采集设备信号,并在页面每个表单中放入名为 attrelix_visitor 的隐藏字段,内含短期有效的访客令牌。单页应用可使用 window.attrelix.token()。
<script src="https://attrelix.com/v1.js?v=0bbe74b52d" data-key="pk_live_…" async></script> // single-page apps: wait for the token before you submit const visitor = await window.attrelix.token();
2. 从服务器检测这次注册
用私密密钥发送邮箱、客户端 IP 和访客令牌。可选:external_id(你的用户 id)、user_agent 和 card_fingerprint(例如 Stripe 的 card.fingerprint)。
curl https://attrelix.com/v1/check \ -H "Authorization: Bearer $ATTRELIX_SECRET" \ -H "Content-Type: application/json" \ -d '{"email":"jdoe+7@gmail.com","ip":"203.0.113.9","visitor":"vt1.…"}'
# Python r = requests.post("https://attrelix.com/v1/check", timeout=3, headers={"Authorization": f"Bearer {SECRET}"}, json={"email": email, "ip": ip, "visitor": form["attrelix_visitor"]}) decision = r.json().get("decision", "allow") if r.ok else "allow"
3. 根据决定处理
allow:发放免费额度。review:要求让团伙付出成本的东西——银行卡、手机号——或少发额度。block:拒绝账号或额度。如果调用失败,请放行:绝不要因为我们而拦住真实用户。
密钥与令牌
- 公开密钥(pk_live_…):本来就是公开的。它放在你的页面里,只能在控制台允许的来源上采集信号。
- 私密密钥(sk_live_…):仅限服务器使用。用于发起检测和读取结果。我们只保存它的哈希:请在创建时复制。
- 访客令牌:由我们签名,有效期 15 分钟,仅可用于一次检测,并绑定你的项目。重复使用的令牌,或来自与注册请求不同网络的令牌,会提高评分。
POST /v1/check
请求体(JSON)。email、ip、visitor 至少提供一个。
| 用户填写的邮箱地址。 | |
| ip | 注册请求的客户端 IP(不是你服务器的 IP)。 |
| visitor | 表单中 attrelix_visitor 的值。 |
| user_agent | 注册请求的 User-Agent 头。 |
| external_id | 账号已存在时,你的账号 id。 |
| card_fingerprint | 注册时绑卡的银行卡指纹。 |
响应
decision 为 allow、review 或 block。score 介于 0 到 100:各原因分值之和,有上限。每个原因都有稳定的代码,可记录或展示。
{
"id": "chk_3fJ8kQ2mN7pX1aZb",
"decision": "block",
"score": 100,
"reasons": [
{ "code": "linked_accounts_10", "points": 45, "detail": "14" },
{ "code": "alias_of_existing", "points": 30, "detail": "3 variants of jdoe@gmail.com" },
{ "code": "datacenter_ip", "points": 25, "detail": "aws" }
],
"email": { "normalized": "jdoe@gmail.com", "disposable": false, "relay": false, "mx": "yes", … },
"network": { "ip": "3.88.0.1", "type": "datacenter", "provider": "aws", "signups_24h": 2 },
"device": { "id": "dev_9c1e…", "token": "valid", "browser": "Firefox 144", "flags": ["canvas_noise"] },
"linked": { "accounts": 14, "by_device": 12, "by_card": 0, "cluster": "cl_7q2f…" },
"latency_ms": 38
}
错误
错误以 JSON 返回:{"error": code, "message": text}。
| 401 | 密钥缺失、未知、已吊销或类型错误(在 /v1/check 上使用 pk_ 密钥)。 |
| 400 | 请求体不是 JSON,或 email、ip、visitor 均未提供。 |
| 402 | 套餐的月度检测次数已用完。 |
| 403 | 采集脚本运行在未被允许的来源上。 |
| 429 | 同一地址的请求过多。 |
评分
分值相加,上限 100。默认 50 分起复核、80 分起拦截,两者都可调整。仅凭一次性邮箱即进入复核;任何单一设备或网络信号都不会。
| 代码 | 分值 | 含义 |
|---|---|---|
| invalid_email | +50 | 邮箱地址无效 |
| disposable_email | +50 | 一次性邮箱域名 |
| no_mx | +35 | 该域名无法收信 |
| alias_of_existing | +30 | 已出现邮箱的另一种写法 |
| relay_email | +10 | 转发服务地址 |
| plus_tag | +5 | + 标签或 Gmail 点号 |
| tor_exit | +35 | Tor 出口节点 |
| datacenter_ip | +25 | 数据中心或云服务地址 |
| vpn_ip | +20 | VPN 地址 |
| ip_signups_24h | +10 | 该 IP 24 小时内注册 3 个以上账号 |
| ip_signups_24h_high | +25 | 该 IP 24 小时内注册 10 个以上账号 |
| subnet_burst | +15 | 该子网 1 小时内注册 10 个以上账号 |
| automation_webdriver | +40 | WebDriver 自动化 |
| headless_browser | +40 | 无头浏览器 |
| automation_cdp | +10 | DevTools 协议自动化(Puppeteer、Playwright) |
| antidetect_browser | +15 | 反检测浏览器(同时存在多种伪装) |
| headless_viewport | +15 | 没有浏览器工具栏或标签页的窗口 |
| webgl_os_mismatch | +25 | 显卡属于另一个操作系统 |
| memory_cpu_mismatch | +10 | 核心数与内存不一致 |
| no_human_interaction | +30 | 瞬间提交,没有打字、移动鼠标或触摸 |
| instant_signup | +25 | 页面加载后不到一秒就填好并提交 |
| os_mismatch | +20 | 操作系统信息自相矛盾 |
| browser_mismatch | +20 | 浏览器与其 user agent 不符 |
| fonts_mismatch | +15 | 字体与声称的系统不符 |
| canvas_noise | +15 | 随机化的 canvas 指纹 |
| software_renderer | +15 | 软件渲染(虚拟机或无头环境) |
| zero_window | +15 | 窗口尺寸为零 |
| permissions_mismatch | +15 | 权限状态相互矛盾 |
| no_plugins | +10 | 桌面版 Chrome 没有插件 |
| no_languages | +10 | 浏览器未设置语言 |
| utc_timezone | +5 | 时钟设为 UTC |
| token_missing | 0–100 | 没有访客令牌(脚本未加载或被拦截) |
| token_invalid | +30 | 伪造或不属于本项目的访客令牌 |
| token_replayed | +35 | 访客令牌已被使用 |
| token_expired | +10 | 访客令牌已过期 |
| token_ip_mismatch | +8 | 令牌在其他网络采集 |
| token_ua_mismatch | +15 | 令牌由其他浏览器采集 |
| linked_accounts | +15 | 与其他账号关联 |
| linked_accounts_3 | +30 | 与 3 个以上账号关联 |
| linked_accounts_10 | +45 | 与 10 个以上账号关联 |
| shared_card | +30 | 银行卡被其他账号使用过 |
| device_burst | +15 | 该设备 1 小时内检测 5 次以上 |
数据来源
一次性邮箱域名:disposable-email-domains 项目(CC0)和 disposable/disposable-email-domains(MIT),每日更新。数据中心网段:AWS、Google Cloud、Oracle Cloud、DigitalOcean 和 Linode 公布的列表。Tor:Tor Project 的出口节点列表,每小时更新。
当前:98,644 个一次性邮箱域名,21,665 个网段。