文档

把采集脚本加到注册页面,从服务器调用一个接口,再根据决定处理。

快速开始

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 至少提供一个。

email用户填写的邮箱地址。
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+35Tor 出口节点
datacenter_ip+25数据中心或云服务地址
vpn_ip+20VPN 地址
ip_signups_24h+10该 IP 24 小时内注册 3 个以上账号
ip_signups_24h_high+25该 IP 24 小时内注册 10 个以上账号
subnet_burst+15该子网 1 小时内注册 10 个以上账号
automation_webdriver+40WebDriver 自动化
headless_browser+40无头浏览器
automation_cdp+10DevTools 协议自动化(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_missing0–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 个网段。