风控系统 V1
用于直接交付后端技术开发。通用 Java / Spring Boot 业务系统接入方案,按三个阶段推进:先止损、再识别、后精细化运营。
Java 后端Spring BootMySQLRedis设备指纹IP 风控提现止损
P0
先止损
优先完成注册风控、提现风控、风险日志与审核,防止批量注册和资金损失。
P1
再识别
补充点击行为分析、脚本识别、同设备多账号任务限制。
P2
后运营
增加团队风控、邀请奖励冻结、规则配置、统计看板。
一、总体接入原则
风控系统 V1 建议采用“内嵌业务模块”方式接入原系统:独立建表、独立业务包、在原业务 Service 关键节点直接调用风控 Service。
推荐做法
- 风控数据单独建表,避免污染用户、提现、任务等核心业务表。
- 在注册、登录、点击、提现等原业务流程中插入风控检查。
- 高频计数和短期状态放 Redis,长期画像和日志落 MySQL。
- 提现为最终止损点,注册为前置过滤点。
不建议做法
- V1 阶段不建议拆独立风控微服务。
- 不建议所有风控判断都通过 HTTP 二次调用。
- 不建议第一版就做复杂机器学习或过重规则引擎。
- 不建议邀请奖励实时全额发放,应先冻结再结算。
阶段一 / P0
最小可上线止损版
目标:先挡批量注册 + 提现损失
必须完成
- 新增风险用户画像表、设备表、IP 表、命中日志表、提现风控记录表、审核工单表。
- 接入注册风控:同设备注册、同 IP 注册频率、邀请码异常增长、本地黑名单。
- 接入提现风控:风险分、注册时长、同收款账户、同设备多账号、历史命中记录。
- 后台可查看风险用户、风险详情、审核工单、黑白名单。
- 命中风险后必须沉淀日志,方便人工复核。
上线标准
- 注册接口能识别同设备 / 同 IP 批量注册。
- 提现接口能输出:放行、人工审核、拒绝。
- 风险用户能进入后台列表。
- 审核人员能处理提现风险工单。
- 所有命中规则有日志记录。
阶段二 / P1
点击与行为风控版
目标:识别脚本点击和多账号任务套利
需要补充
- 新增行为日志:页面停留、点击间隔、鼠标移动、滚动次数、requestId。
- 任务点击前调用风控检查,异常点击不计收益。
- 识别固定频率点击、停留时间过短、无行为轨迹。
- 同设备多个账号当天执行任务时,限制任务或冻结收益。
上线标准
- 异常点击可被标记为无效,不发放收益。
- 同设备多账号任务行为可被识别。
- 用户风险分可因点击异常自动累加。
- 点击风控日志可在后台查看。
阶段三 / P2
团队、邀请与运营配置版
目标:控制团队作弊和长期运营风险
需要补充
- 邀请奖励改为冻结结算:被邀请人满足真实活跃、首充、非关联作弊后再释放。
- 团队异常扫描:同 IP 聚集、同设备聚集、低充值率、高注册爆发。
- 规则配置管理:阈值、分值、动作支持后台调整。
- 风控统计看板:注册拦截、提现审核、无效点击、风险用户趋势。
上线标准
- 邀请奖励可冻结、释放、作废。
- 异常团队可自动标记。
- 核心规则可由后台配置。
- 运营可查看每日风险趋势和拦截效果。
二、核心接入点
| 业务场景 | 接入位置 | 调用方式 | 处理结果 |
| 注册 | 注册 Service 创建用户前 | riskRegisterService.checkBeforeRegister(...) | 放行 / 验证码升级 / 拒绝 / 观察 |
| 注册成功 | 用户创建成功后 | riskRegisterService.afterRegisterSuccess(...) | 写入设备关系、IP 画像、风险画像 |
| 登录 | 登录成功前后 | riskLoginService.checkLogin(...) | 放行 / 升级验证 / 限制登录 |
| 任务点击 | 任务收益发放前 | riskTaskService.checkTaskClick(...) | 放行 / 无效点击 / 禁止任务 |
| 提现 | 提现申请保存前 | riskWithdrawService.checkWithdraw(...) | 放行 / 人工审核 / 拒绝 / 禁止提现 |
// 注册接入示例
RiskDecision decision = riskRegisterService.checkBeforeRegister(request);
if (!decision.isPass()) {
throw new ServiceException(decision.getMessage());
}
userService.register(...);
riskRegisterService.afterRegisterSuccess(event);
// 提现接入示例
RiskDecision withdrawDecision = riskWithdrawService.checkWithdraw(request);
if (!withdrawDecision.isPass()) {
if (withdrawDecision.getActions().contains("MANUAL_REVIEW")) {
withdrawOrder.setStatus("PENDING_REVIEW");
} else {
throw new ServiceException(withdrawDecision.getMessage());
}
}
三、默认风险规则
| 规则 | 阈值 | 分值 / 动作 |
| 同设备注册账号数 | >= 2 | +40 / 人工审核 |
| 同 IP 24 小时注册数 | > 5 | +30 / 人工审核 |
| 同 IP 10 分钟注册数 | > 3 | +20 / 验证码升级 |
| 页面停留时间 | < 2 秒 | +15 / 无效点击 |
| 同设备当天任务账号数 | > 2 | +40 / 禁止任务 |
| 注册后提现 | < 24 小时 | 人工审核 |
| 总风险分 | >= 60 | 人工审核 |
| 总风险分 | >= 90 | 拒绝 / 阻断 |
四、风险等级
| 分数 | 等级 | 默认处理 |
| 0 - 29 | LOW | 正常 |
| 30 - 59 | MEDIUM | 观察 |
| 60 - 89 | HIGH | 限制 / 审核 |
| 90+ | CRITICAL | 拒绝 / 阻断 |
RiskAction:
PASS
OBSERVE
CAPTCHA_UPGRADE
INVALID_CLICK
FREEZE_INVITE_REWARD
BLOCK_TASK
BLOCK_WITHDRAW
MANUAL_REVIEW
REJECT
五、数据表清单
| 表名 | 用途 | 阶段 |
| risk_user_profile | 用户风险画像:风险分、等级、状态、限制标记 | 阶段一 |
| risk_device | 设备指纹画像 | 阶段一 |
| risk_device_user_rel | 设备与用户关系 | 阶段一 |
| risk_ip_profile | IP 风险画像 | 阶段一 |
| risk_hit_log | 规则命中日志 | 阶段一 |
| risk_review_order | 人工审核工单 | 阶段一 |
| risk_withdraw_record | 提现风控记录 | 阶段一 |
| risk_behavior_log | 行为日志:点击、停留、鼠标、滚动 | 阶段二 |
| risk_rule_config | 动态规则配置 | 阶段三 |
| risk_black_white_list | 黑白名单:用户、IP、设备、提现账户 | 阶段一 |
六、Redis Key
risk:register:ip:{ip}:{yyyyMMdd}
risk:register:invite:{inviteCode}:{yyyyMMddHH}
risk:login:ip:{ip}:{yyyyMMddHH}
risk:login:device:{deviceId}:{yyyyMMdd}
risk:task:device:{deviceId}:{yyyyMMdd}
risk:task:user:clicks:{userId}:{yyyyMMdd}
risk:user:score:{userId}
七、前端上送字段
| 场景 | 字段 |
| 注册 / 登录 | deviceId, userAgent, timezone, language, screenResolution, fingerprintInfo |
| 点击任务 | taskId, staySeconds, lastClickTime, mouseMoveCount, scrollCount, requestId |
| 提现 | withdrawAccount, amount, deviceId, userAgeHours, todayIncome, last7dIncome |
八、后台管理页面
| 页面 | 核心字段 | 操作 | 阶段 |
| 风险用户 | 用户ID、风险分、等级、状态、提现限制、任务限制 | 详情、限制、解除、拉黑 | 阶段一 |
| 风险详情 | 画像、设备、IP、命中日志、提现记录 | 查看、备注 | 阶段一 |
| 审核工单 | 用户ID、类型、原因、状态、审核人、审核时间 | 通过、拒绝、限制、拉黑 | 阶段一 |
| 黑白名单 | 类型、值、名单类型、原因、失效时间 | 新增、编辑、删除 | 阶段一 |
| 规则配置 | 规则编码、场景、阈值、分值、动作、状态 | 启用、停用、编辑 | 阶段三 |
| 风控统计 | 注册拦截、提现审核、无效点击、风险趋势 | 筛选、导出 | 阶段三 |
九、交付与联调顺序
| 步骤 | 内容 | 负责人 |
| 1 | 执行风控 SQL,创建 risk_* 表 | 后端 |
| 2 | 合并 risk 模块代码:domain、mapper、service、rule、controller | 后端 |
| 3 | 在注册和提现 Service 插入风控调用 | 后端 |
| 4 | 前端补充 deviceId、fingerprint、行为参数 | 前端 |
| 5 | 后台接入风险用户、审核工单、黑白名单页面 | 后端 / 前端 |
| 6 | 灰度开启注册风控与提现风控 | 技术 / 运营 |
| 7 | 根据命中日志调阈值,再开启点击和团队风控 | 技术 / 运营 |
十、最终结论
本 V1 文档的核心是三阶段落地:第一阶段先完成注册与提现止损,第二阶段补齐点击行为识别,第三阶段做团队、邀请、规则配置与统计运营。技术开发时不要一开始追求复杂模型,先把关键节点拦住、把日志留住、把审核跑起来。