PRDv1.9 · 02

注册登录 IP 黑名单 · PRD

作者 Luke 版本 v1.9 日期 2026-10-07 状态 草稿 平台 BRAND_A & BRAND_B 类 K

模板基准 prd

模板调整说明:后台录入与导入放在同一模块;保留导入任务规则与待确认项;验收和原型视觉清单分别收为默认折叠附录 A、B。

版本记录
版本 日期 变更摘要
v1.9 2026-10-07 按精简结构整理全文;保留列表分页与当前页全选,移除行级历史入口;明确网段展开为逐条 IP 后导入(§3);同步双语提示与 Notice(§6),验收/视觉清单独立折叠(附录 A、B)。
v1.8 2026-08-17 重构 L0、字段与默认放行;备注按纯字符数,中英文同权;保留四段权限、批量静默剔除与 29 条 AC(§2~§6、附录 A)。
v1.6 2026-07-21 移除网段/CIDR;手动与 CSV 统一静默剔除;直接查 DB;四段权限、明文导出;当版移除分页(§2~§5)。
v1.5 2026-07-01 CSV 上限改为 1000 笔;新增渠道单选、无全部;移除相关截图(§2.2)。
v1.4 2026-07-01 拦截 HTTP 200/4031;批删只回成功/失败数;备注更名(§2.2、§2.3、§6.2)。
v1.3 2026-07-01 渠道失败分业务/技术;操作日志复用、幂等 Key、保留地址边界(§2.2、§3.2、§3.3、§5.2)。
v1.2 2026-07-01 真实 IP 信任边界、既有域名映射、默认放行与备注 100 字符(§2.2、§3.2、§3.3、§3.5)。
v1.1 2026-06-30 物理删除与前值日志;批量删除;CSV 异步导入(§2.2、§2.3、§5.2)。
v1.0 2026-06-30 后台名单管理与注册/登录接口拦截(§2、§3)。
目录

L0 · 快速掌握

注册登录 IP 黑名单资讯图表

① 一句话需求

运营在「网站管理 → 注册登录 IP 黑名单」按渠道维护恶意来源 IP;注册/登录入口仅拦截同渠道完整 IP 命中,玩家只看到中性 Notice。

② 术语写死表

词 本文唯一含义
真实外网 IP 网关清洗后写入内部 header 的来源值;业务层不信外部 IP 字段(§2.1)。
渠道 BRAND_A/BRAND_B;后台「用户渠道」与权限「平台」指同一隔离维度(§2.1、§5)。
静默剔除 无效与重复行不入库,不逐条报错或提供失败明细,只返回成功笔数(§3.2)。
物理删除 真正移除名单记录;完整前值与删除原因写入既有管理员操作日志(§3.3)。
导入任务 CSV 异步处理实体;任务状态不等于名单记录状态(§3.2)。

③ 全局红线表

# 不变量 破了会怎样 验证锚点
G1 只认网关提供的真实 IP。 伪造外部 header 可绕过拦截。 AC28
G2 同渠道完整 IPv4 相等才命中,不支持网段输入或匹配。 同段其他 IP 被误封。 AC1、AC2
G3 A 渠道名单不影响 B 渠道。 跨品牌误封。 AC18
G4 拿不到 IP、认不出渠道或查 DB 失败,一律记日志并放行。 故障把正常玩家挡在入口。 AC5、AC8
G5 手动与 CSV 都静默剔除无效/重复行,只回成功数。 两条录入通道结果不一致。 AC10、AC11
G6 文件级失败须明确报错,不创建任务。 运营误以为上传成功。 AC13
G7 被拦截玩家只看到中性提示,不返回 IP 或命中原因。 泄露名单与判定信息。 AC26
G8 删除记录前保存完整前值与删除原因,无一键还原。 删除后无法追溯。 AC20
G9 同一幂等 Key 重复请求返回首次已完成结果。 重试重复执行或返回新冲突结果。 AC23

④ 适用范围与「不做」边界

本期做:注册/登录判定(§1~§2);后台分页列表、手动/CSV 录入、删除/批删、导出(§3);生效/异常(§4);四段权限与审计(§5);中性 Notice 和关闭后重试(§6)。

明确不做:网段转换器、通配/前缀匹配、纯 IPv6(§2.1、§3.2);白名单、编辑、启停、过期、一键还原(§2.2、§3.3);OTP 前置拦截、历史账号冻结(§1);缓存、熔断、主动告警、新建限流(§4、§6.2)。

读者为后台/客户端前端、服务端、测试、运营与稽核。


1. 范围与入口

项目 规则
BO 网站管理 → 注册登录 IP 黑名单;列表、新增与删除确认。
Client 既有登录/注册流程;仅 POST /api/register、POST /api/login 执行本判定;OTP/验证码前置接口沿用既有行为。
渠道 BRAND_A & BRAND_B 独立;Host 对应渠道使用既有域名管理映射。
存量 不回溯、不冻结已注册账号;账号下次从被加黑 IP 登录仍受拦截,从未命中 IP 来则正常判定。
页面依据 为精确页面,覆盖 BO 与 Client Notice。

2. 核心判定

2.1 取值与顺序

  1. 网关剥离外部 X-Forwarded-For/X-Real-IP,写入内部单值真实 IP header;受信代理清单由网关维护。
  2. IPv4-mapped IPv6 归一化为 IPv4。空值、unknown、格式非法、含 *//、纯 IPv6,以及以下非公网来源视为识别失败:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、127.0.0.0/8、169.254.0.0/16、100.64.0.0/10、0.0.0.0/8、::1。清单中的 CIDR 只表示边界,不是可录入格式。
  3. Host 忽略端口、大小写不敏感,按既有域名模块识别渠道;多域名可映射同渠道。无映射与模块异常均放行,但使用不同 fail_reason。
  4. 直接查询 DB,按渠道与规范化 IPv4 精确等值比对;命中才拦截。命中日志记录实际命中 IP 与记录 ID。

2.2 结果与名单状态

条件 结果 留痕/提示
同渠道 IP 命中 HTTP 200,code:4031,i18nKey 与中性 message;不继续该次注册/登录 §6.2 Notice;响应无名单信息
未命中或渠道名单为空 放行到既有注册/登录流程 不新增本模块提示
IP/渠道/DB 识别或查询失败 放行到既有流程 系统运行日志;不向玩家展示降级理由
名单记录 仅存在/不存在 无启停、草稿、过期或总开关;要放行则删除记录

3. 后台页面与字段

3.1 分页列表

控件/字段 规则
用户渠道 下拉单选;「全部」仅包括有权限渠道;单渠道账号锁定该渠道且无全部。
IP 标准单 IPv4,精确搜索;不接受网段、通配、前缀或模糊搜索。
操作人 精确搜索,≤50 字符。
添加时间 日期范围;筛选按 AND 组合;保留既有日期选择方式。
列表 选择框、ID、用户渠道、IP、添加时间、操作人、备注、操作。ID 为字符串、不承诺连续;默认添加时间倒序,支持 ID/添加时间排序。
操作 行操作仅「删除」;历史通过既有操作日志模块按渠道+IP 查询,不依赖已删除记录主键。
分页 保留现有分页与页码切换;页大小沿用既有设置;重新查询回第一页。全选只选当前页,切页或重新查询清空勾选。
页面动作 右上新增;筛选区 Search/Export;列表左下批量删除;右下分页。不新增列表 Reset。

3.2 新增与 CSV 导入

字段 类型 必填/默认 校验时机与边界
用户渠道 Enum 必填、默认空 只选有权限的具体渠道,无全部;提交硬阻断。
IP 黑名单文件 CSV 与手动二选一、默认空 数据行≤1000(不含表头),文件≤10MB;选档即时检查文件与行数上限。
手动录入 IP String 与 CSV 二选一、默认空 英文逗号分隔,≤100 条;提交检查条数;单条合法性不做前端逐条报错。
备注 String 必填、默认空 ≤100 纯字符,中英文同权;提交硬阻断;CSV 整批套用同一备注。
  1. 导入模板只有 ip 一列,表头大小写不敏感;支持 UTF-8 BOM、忽略空行。网段须由运营在系统外展开成逐条 IP,再按上限拆批导入;CSV 中仍不可直接写 CIDR 或通配网段。
  2. 手动同步处理,CSV 异步处理;两者均去重并静默剔除非法写法、非公网地址、纯 IPv6、同批重复、库中重复。仅回成功笔数;合法行先入库,无失败明细或部分成功状态;全部行无效时成功数可为 0。
  3. 文件>10MB/空/仅表头/非 UTF-8/表头不含 ip 为文件级失败,不创建任务;CSV>1000/手动>100 整体拒绝,不做部分处理。CSV 格式须为单列模板。
  4. 表单保存用于提交所选录入方式;重置清空该新增表单。填写 CSV 时手动区域不可同时提交;填写手动时须先清除所选文件。
任务状态 进入/转换
PENDING 已创建,未被拉取;开始→RUNNING;未执行前取消→CANCELLED。
RUNNING 完成→SUCCESS;超时/心跳丢失/异常→FAILED;取消请求→CANCELLING。
CANCELLING 停止拉新行,等待当前批次落定→CANCELLED。
SUCCESS/FAILED/CANCELLED 终态;重试须重传原文件建新任务。无部分成功态;worker 失败前已入库行保留且生效,不整体回滚。

3.2.1 写操作带 Idempotency-Key;相同 Key 重复请求返回首次已完成请求的原始状态码与响应体。使用不同 Idempotency-Key 的写请求并发新增同渠道同 IP,首个提交成功,其余回 4092,无重复记录。

3.3 删除与审计

动作 规则
行删除 弹窗确认目标 IP;必填删除备注,≤100 纯字符;取消不修改记录。
批量删除 当前页选择;未选择时置灰;确认数量与统一必填删除备注。
返回 仅成功 N/失败 M;无权限、不存在、系统错误合并为失败,不区分原因。
留痕 物理删除前记录完整前值:ID、渠道、IP、添加时间、原操作人、原备注;删除原因单独记录。无恢复入口;需要重新拦截须重新添加。

3.4 导出

3.4.1 当前已查询筛选与权限内导出;IP 仅精确匹配。字段为 ID、渠道、IP、添加时间、操作人、备注;明文、不加水印;日志记录导出人、时间、渠道与行数。列表中 IP 是配置值、不关联姓名/手机号/证件,故不设置脱敏或明码权限。用户级每小时 1 次,超限 4291。

4. 生效、异常与降级

场景 结果
新增/删除提交完成 下次查询立即可见,DB 为唯一真源;无缓存、熔断、失效补偿或生效延迟。
DB 异常 入口判定放行并记录运行日志;不建立误封记录。
导入 worker 崩溃 保留已提交行,任务 FAILED;重新导入重复行静默剔除。
监测 使用系统运行日志;不新增主动告警。
性能 (渠道, IP) 索引、连接池与查询超时由开发评估;缓存属于后续评估(OP-3)。

5. 权限与留痕

权限 能力 无权限表现
平台×查看 列表与既有操作日志 未分配平台不可查;无查看时隐藏该页入口,直调接口拒绝。
平台×新增 手动/CSV 隐藏新增动作;服务端拒绝越权写入。
平台×删除 行删/批删 隐藏删除动作与选择控件;服务端拒绝越权删除。
平台×导出 当前筛选与既有操作日志导出 隐藏导出动作;服务端拒绝越权导出。

⚠️ 设计如此:4 项权限独立授予,新账号默认无任何权限,须显式分配;新增与删除风险不同。不设固定角色或超管。管理员操作日志复用既有模块,记录操作类型(新增/删除/导入/导出)、影响行数、操作人、时间、渠道与备注;保留期限沿用既有管理员日志规则。IP/渠道/DB 异常记系统运行日志。

6. 提示语

6.1 后台提示

场景 中文 English 呈现/结果
CSV 受理 📐 已提交(CSV:任务已创建,见任务中心) Submitted (CSV: task created; see Task Center) Toast;创建异步任务
上限 📐 超出上限,请拆分后重试 Limit exceeded. Split the input and try again. Inline;不提交
文件级失败 📐 文件不符合要求:{具体原因} File does not meet requirements: {reason} Inline;不创建任务;原因:空文件/仅表头/非 UTF-8/缺少 ip 表头/CSV 格式错误;>10MB 使用上限文案,同样不创建任务
手动完成 📐 成功录入 N 笔(无效 / 重复已自动剔除) Successfully added N records (invalid / duplicate entries automatically discarded) Toast
CSV 完成 📐 成功导入 N 笔(无效 / 重复已自动剔除) Successfully imported N records (invalid / duplicate entries automatically discarded) Toast/任务中心
删除完成 📐 操作完成:成功 N 笔,失败 M 笔 Operation completed: N succeeded, M failed Toast
并发冲突 📐 操作失败,数据可能已更新,列表已刷新,请确认后重试 Operation failed. Data may have changed. The list has been refreshed; check and try again. Toast;刷新列表
导出限频 📐 导出过于频繁,请稍后再试 Exporting too frequently. Please try again later. Toast
必填/二选一 📐 请选择用户渠道、填写备注,并选择一种录入方式 Select a platform, enter remarks, and choose one input method. Inline
备注过长 📐 备注最多 100 字符 Remarks must not exceed 100 characters. Inline
IP 查询格式 📐 请输入单一 IPv4 地址 Enter an individual IPv4 address. Inline;不查询
日期反向 📐 开始时间不得晚于结束时间 Start time must not be later than end time. Inline;不查询
行删除确认 📐 确认删除 {IP} 吗? Delete {IP}? Modal;确认后删除
批删确认 📐 确认删除 N 笔吗? Delete N records? Modal
删除备注缺失 📐 请填写删除备注 Enter deletion remarks. Inline;不删除
列表无结果 📐 暂无数据 No data available. 列表空态

6.2 Client Notice 与既有动作

Key/场景 中文 English 呈现/结果
block.network_unavailable 当前网络环境异常,无法登录 / 注册,详情请联系客服。 Your network environment is currently unavailable. Please contact customer support. Modal;标题 Notice;在线客服/Chat;右上 X 关闭
协议未勾 ↪ 请先同意隐私政策 Please agree to the privacy policy 复用既有 Toast;尚未提交注册/登录
OTP 已发送 ↪ 验证码发送成功 Verification code sent successfully 复用既有 Toast;不执行本模块 IP 拦截

6.2.1 智能端按 i18nKey 展示,旧端不认 4031 时直接展示 message,拦截仍生效。Notice 不使用额外称谓;响应仅含 code/i18nKey/中性 message,不带 IP、命中记录或原因。

6.2.2 关闭 Notice 回到原表单;按钮仅视觉置灰、仍可再次提交;请求中 loading、禁止重复点击至响应返回。在线客服沿用既有入口。限流沿用平台通用能力;不冻结账号,不按 IP 拦截结果新增账号状态。

7. 待确认项

# 问题 决策者 时点
OP-1 ID 序列、位数;已有生成逻辑则沿用 后端 开发评审前
OP-2 后续 IPv6 存储长度;本期 IPv4 ≤15 字符 后端 后续功能启动前
OP-3 直接查 DB 的性能门槛与何时评估缓存 开发 开发评审
OP-4 导入超时判据与提交粒度;无心跳>5分钟仅建议值 开发 开发评审

附录 A:验收标准
AC P 前提/动作 → 预期
AC1 P0 同渠道名单有 1.2.3.4,来源相同 → HTTP 200/4031 拦截(G2)。
AC2 P0 来源 1.2.3.5 或 1.2.3.0 → 放行,不按网段封禁(G2)。
AC3 P0 手动/CSV 含 1.2.3.*、1.2.3.0/24、1.2.3.4/32 → 剔除,不逐行报错;系统不展开网段。
AC4 P1 IPv4-mapped IPv6 归一化后匹配;纯 IPv6 放行。
AC5 P0 内部 IP header 缺失/空 → 放行并记运行日志(G4)。
AC6 P0 私网、回环、保留段、CGNAT → 放行并记日志。
AC7 P0 无渠道映射/域名模块异常 → 都放行,fail_reason 不同。
AC8 P0 DB 连接失败/查询超时 → 放行并记日志(G4)。
AC9 P0 名单空 → 全放行;无全站关闭拦截开关。
AC10 P0 手动含合法/非法/重复 → 合法入库,同步只回成功数(G5)。
AC11 P0 CSV 同样输入 → 相同剔除模型,异步只回成功数(G5)。
AC12 P0 全部 CSV 行无效 → SUCCESS,成功数 0,无部分成功状态。
AC13 P0 CSV 空/仅表头/>10MB/非 UTF-8/坏模板 → Inline,未创建任务(G6)。
AC14 P0 CSV ip 单列+界面备注 → 入库所有行备注相同。
AC15 P1 手动101/CSV1001 → 整体拒绝;100/1000 可提交。
AC16 P1 worker 失败 → 保留已提交行;重传去重,不翻倍。
AC17 P1 备注100中文字/混合字符可提交;101拒绝。
AC18 P0 IP 在 A 加黑,从 B 域名注册 → 放行(G3)。
AC19 P0 无B权限账号直调查/删B → 服务端拒绝越权。
AC20 P0 删除后列表无记录,操作日志含完整前值与独立删除原因,无还原入口(G8)。
AC21 P1 物理删除后从既有日志按渠道+IP查询 → 历史仍可追溯,无行级历史动作。
AC22 P1 批删3笔:正常/无权限/已不存在各1 → 成功1失败2,不区分原因。
AC23 P0 相同幂等Key重送新增/删除 → 首次结果重放,不重复执行(G9)。
AC24 P0 不同Idempotency-Key写请求并发加同渠道同IP → 一条成功,其余4092,无重复记录。
AC25 P1 增删后下一查询即时反映;已注册账号不回溯冻结;下次来源命中仍拦。
AC26 P0 命中响应检查 → 除code/i18nKey/中性message外无名单信息(G7)。
AC27 P0 旧App不认4031 → 展示message,仍被拦截。
AC28 P0 伪造外部XFF → 网关剥离,不能改变内部真实IP(G1)。
AC29 P1 关闭Notice再提交 → 可重试;请求期间防重复点击。
AC30 P1 查询/切页 → 查询回第一页;勾选仅当前页,切页清空;排序按所选ID/时间。
AC31 P1 修改筛选尚未Search就Export → 导出上次已查询条件;仅权限内记录,二次导出触发频控。
AC32 P1 全选后取消删除 → 记录保留;备注缺失/超长不删除。
附录 B:原型视觉清单

原型视觉清单

视觉 ID 载体 用途 证据
VIS-BO-NONE BO 列表、整页新增、确认弹窗,无内容图片或占位 §3
VIS-CLIENT-001 Client 既有登录页宣传图,仅保留 355:170 灰阶占位;不使用真实宣传图 Axure u185;§6.2
VIS-CLIENT-002 Client 既有 Logo,仅用 LOGO 文字占位;不使用真实品牌素材 Axure u198;§6.2

清单只约束内容图片与图片占位;表格、图标、手机外框、载入骨架与标注不计素材槽位。


文档版本:v1.9 | 日期: 2026-10-07 | 作者: Luke | 文档状态:草稿