关于 anti-fraud
anti-fraud 是用于注册表单的反欺诈与机器人检测方案,面向需要识别自动化注册并减少误判的开发者。它结合服务端校验、行为信号和风险评分,并通过识别密码管理器与键盘操作降低误报。
主要功能
- 01验证加密时间令牌
- 02匹配设备指纹
- 03检测输入与计时异常
- 04通过蜜罐字段识别机器人
- 05按风险信号评分并记录决策
适用场景
- 01保护注册表单免受机器人提交
- 02检测异常快速填写或提交
- 03识别复制粘贴与输入模式异常
- 04降低密码管理器用户误判
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ art-of-technology/ anti-fraud-skill --skill anti-fraud安装后在 Claude Code 中输入/anti-fraud确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.md.gitignorereferences/signal-weights.mddetection-patterns.mdvalidators.md详细介绍
反欺诈与机器人检测系统
一个用于注册表单的三层防御系统,可检测机器人,同时尽量避免误判合法用户。
架构概述
Layer 1: SERVER-SIDE (tamper-proof)
├── Encrypted timestamp token verification
├── Device fingerprint matching
└── Minimum fill time enforcement (3s)
Layer 2: MANIPULATION DETECTION (server comparison)
├── Client vs Server timing mismatch
├── Keystroke/input inconsistency
└── Impossible value detection
Layer 3: CLIENT SIGNALS (informational)
├── Honeypot fields
├── Behavioral analysis
└── Content analysis
**核心原则:**绝不单独信任客户端数据。
快速实现
1. 表单令牌端点
// /api/auth/form-token
// Generate AES-256-GCM encrypted token with timestamp
const token = encrypt({ timestamp: Date.now(), fingerprint, nonce });
2. 行为追踪钩子
interface BehaviorSignals {
totalFillTimeMs: number;
fieldTimings: Record<string, number>;
inputMethods: Record<string, 'typed' | 'pasted' | 'autofilled' | 'mixed'>;
keystrokes: KeystrokeData[];
keystrokeVariance: number;
mouseMovements: MouseMovement[];
hasMouseActivity: boolean;
focusSequence: string[];
tabKeyUsed: boolean;
backspaceCount: number;
}
3. 蜜罐字段
添加隐藏字段(通过 CSS 隐藏,设置 aria-hidden、tabIndex=-1):
website、phone2、address、company
蜜罐字段中有任何内容 → 立即影子封禁
风险评分
影子封禁触发条件(符合任一项 = 封禁)
| 触发因素 | 条件 |
|---|---|
| 服务端计时 | 填写时间 < 3 秒 |
| 令牌 | 无效或缺失 |
| 操纵行为 | 高置信度检测结果 |
| 分数 | >= 80 分 |
| 蜜罐 | 任一字段已填写 |
| 电子邮件 | 一次性邮箱域名 |
信号权重
完整权重表请参见 references/signal-weights.md。
严重(+100): HONEYPOT_FILLED、DISPOSABLE_EMAIL
高(+25-40): INSTANT_SUBMIT、ALL_FIELDS_PASTED、BOT_PASSWORD_PATTERN、NO_MOUSE_MOVEMENT
正向(-5 至 -40): PASSWORD_MANAGER_LIKELY、KEYBOARD_ONLY_USER、NATURAL_TYPING_RHYTHM
影子封禁响应
if (shouldShadowBan) {
await delay(1000 + Math.random() * 2000); // Appear legitimate
return Response.json({ message: 'Registration successful' }, { status: 200 });
// No account created, no backend call
}
误判预防
密码管理器检测(-40 分)
const isPasswordManager =
allFieldsAutofilledOrPasted &&
keystrokeCount < 5 &&
fillTime >= 1000 && fillTime < 15000;
纯键盘用户检测(-15 分)
const isKeyboardOnly =
tabKeyUsed &&
focusSequence.length >= 2 &&
!hasMouseActivity &&
totalFieldTime > 1000;
文件结构
src/
├── lib/anti-fraud/
│ ├── index.ts
│ ├── types.ts
│ ├── constants.ts
│ ├── risk-scoring.ts
│ ├── server-token.ts
│ ├── manipulation-detector.ts
│ └── validators/
│ ├── email-validator.ts
│ ├── name-validator.ts
│ └── password-validator.ts
├── hooks/use-behavior-tracking.ts
├── components/anti-fraud/honeypot-fields.tsx
└── app/api/auth/
├── form-token/route.ts
└── register/route.ts
资源
- **信号权重与阈值:**请参见
references/signal-weights.md - **验证器(电子邮件、姓名、密码):**请参见
references/validators.md - **XML 模式与检测:**请参见
references/detection-patterns.md
环境
AUTH_SECRET=your-secret-key-for-token-encryption
日志记录
所有决策均以 [ANTI_FRAUD] 前缀记录:
[ANTI_FRAUD] { timestamp, emailDomain, serverFillTimeMs, summary: 'Risk: 25/100 (low) - allow' }
评论
支持 Markdown