mcpField
A
anti-fraud

anti-fraud

github.com/art-of-technology安全350 次安装39 周前更新
代码仓库

关于 anti-fraud

anti-fraud 是用于注册表单的反欺诈与机器人检测方案,面向需要识别自动化注册并减少误判的开发者。它结合服务端校验、行为信号和风险评分,并通过识别密码管理器与键盘操作降低误报。

主要功能

  1. 01验证加密时间令牌
  2. 02匹配设备指纹
  3. 03检测输入与计时异常
  4. 04通过蜜罐字段识别机器人
  5. 05按风险信号评分并记录决策

适用场景

  1. 01保护注册表单免受机器人提交
  2. 02检测异常快速填写或提交
  3. 03识别复制粘贴与输入模式异常
  4. 04降低密码管理器用户误判

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/art-of-technology/anti-fraud-skill --skill anti-fraud

安装后在 Claude Code 中输入/anti-fraud确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

README.md
.gitignore
references/
signal-weights.md
detection-patterns.md
validators.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