第3章:输入字符串格式要求——长度、字符集、字段分隔符

3.1 适用场景

本章适用于所有需要将原始支付敏感字符串接入 R8 规则引擎进行解析的场景。凡涉及卡号、有效期、CVN、令牌、加密密文等敏感字段的拼接与传输,均须按照本章定义的格式规范进行前置校验。典型场景包括:

  • 支付网关交易报文预处理——收银台将明文或密文敏感字段拼接为统一字符串传入规则引擎
  • 生命周期管理——令牌申请、更新、撤销时传递的复合型敏感字符串
  • 跨系统敏感数据交换——不同安全域之间通过中间件传输支付敏感负载
  • 日志脱敏前置管道——对原始字符串做格式检查后再执行 R8 规则的脱敏或阻截动作

3.2 前置条件

序号 条件项 验收标准 责任角色
1 R8 规则引擎已部署并处于可接收状态 引擎健康检查端点返回 200 系统运维
2 敏感字符串来源已确认安全通道(TLS 1.2+ / VPN) 链路握手日志无告警 网络工程师
3 调用方已获取本章格式规范文档 v3.2 或更高版本 版本号与规则库一致 应用开发
4 上游数据已完成脱敏分级标记(明文/掩码/加密) 字段元数据标签齐全 数据治理

3.3 操作步骤

步骤 操作 关键检查点 输出
步骤1 定义最大/最小字符串长度 长度边界与业务字段实际最大长度对齐 LengthPolicy.json
步骤2 申明允许字符集(US-ASCII 子集或 Base64 安全字母表) 禁止控制字符、不可见字符、Unicode 风险字符 CharsetWhitelist.txt
步骤3 指定字段分隔符及转义规则 分隔符不得出现在敏感字段值内部(或使用 RFC 式转义) DelimiterSpec.md
步骤4 集成前置格式校验网关 校验失败时返回 400 FORMAT_VIOLATION 而非规则引擎降级 校验网关部署记录
步骤5 执行冒烟测试(含边界值、非法字符、分隔符冲突) 全量用例通过率 100% 测试报告 v3.2-001

3.4 输入输出物

类别 名称 格式 说明
输入 原始支付敏感字符串 String(UTF-8 编码,仅含允许字符集) 调用方传入的待解析负载
输出 格式校验结果对象 JSON 包含 valid(boolean)、errors(数组)、parsedFields(对象)
输出 格式规范文档 Markdown 供调用方集成参考的契约文件
输出 校验网关日志(含每次调用的格式快照) 结构化日志(JSON Lines) 用于审计与异常追溯

3.5 责任边界

角色 职责 不负责
调用方(上游系统) 确保发出的字符串在长度、字符集、分隔符上完全合规 不负责解析规则引擎内部的敏感字段语义
R8 规则引擎 执行格式前置校验,对不合规字符串拒绝并明确报错 不负责修正上游格式错误或自动补全字段
安全审计组 定期抽查校验日志,确认无格式绕过异常 不参与日常格式策略变更的审批流
格式策略管理员 维护长度、字符集、分隔符策略文件并做版本管理 不直接修改上游调用代码

3.6 记录材料

  • 格式策略文件:LengthPolicy.json、CharsetWhitelist.txt、DelimiterSpec.md,纳入 Git 版本库 /policies/r8-format-v3 路径下。
  • 校验网关日志:每日轮转,保留 180 天,字段包括 timestamp、callerId、inputLength、validationResult、errorCode。
  • 格式变更审批单:所有策略修改须通过 ITSM 流程,关联工单号记录在策略文件 commit message 中。

3.7 异常处理

异常类型 触发条件 处理动作 返回码
长度超限 字符串长度 < 8 或 > 2048 字符 拒绝解析,记录 LENGTH_OUT_OF_BOUNDS 错误 400
非法字符命中 包含不在 CharsetWhitelist.txt 中的字符 拒绝解析,标明首个非法字符位置 400
分隔符冲突 字段内部出现未转义的分隔符,或转义序列格式错误 拒绝解析,提示 DELIMITER_COLLISION 及上下文片段 400
空字符串/空字段 输入为空或某字段值为空 拒绝解析,返回 EMPTY_FIELD 错误详情 400
连续分隔符 两个分隔符之间无任何字符 拒绝解析,标记为 MALFORMED_DELIMITER 400
关键原则:格式校验必须在进入 R8 规则引擎核心逻辑之前完成。任何格式异常均不得透传到下游脱敏或路由模块,避免因字符串畸变导致规则误匹配或敏感数据泄露。

3.8 验收标准

验收项 预期结果 验证方式
合法字符串通过校验 返回 valid: true,errors 数组为空,parsedFields 正确拆解 至少 10 组合规用例冒烟测试
超长/超短字符串被拒绝 返回 valid: false,错误码 LENGTH_OUT_OF_BOUNDS 边界值:长度 7、8、2048、2049 各测试 3 次
非法字符被拒绝 返回 valid: false,错误码 ILLEGAL_CHARACTER 分别测试控制字符、空格(不在白名单时)、emoji、中文全角符号
分隔符冲突被拒绝 返回 valid: false,错误码 DELIMITER_COLLISION 在字段值中直接插入未转义的分隔符场景
校验日志完整可追溯 每个请求均产生一条 JSON Lines 日志,包含 callerId、inputLength、result 日志抽取工具验证 24 小时日志完整率 ≥ 99.9%

3.9 输入字符串格式结构参考

下图展示了 R8 规则引擎期望的支付敏感字符串整体结构,包括长度边界、字符集允许范围、字段分隔符布局以及转义机制。该结构是本章所有校验规则的直接映射。

R8 输入字符串格式结构图 R8 输入字符串格式结构图 字符串长度范围:8 ~ 2048 字符 完整支付敏感字符串(连乘体) 字段A:卡号 | 字段B:有效期 | 字段C:CVN | 字段D:令牌/密文 转义规则:字段内若包含分隔符“|”须转义为“\\|” 示例:4111\\\\|1111 字符集允许范围 0-9, A-Z, a-z, 部分符号 (不包含控制字符、emoji、全角) 长度校验:8 ≤ len ≤ 2048 超出范围返回 LENGTH_OUT_OF_BOUNDS 验收通过条件:所有前置校验绿色通过 + 日志完整记录
格式设计原则提醒:分隔符采用竖线 |(ASCII 0x7C),其视觉辨识度高且极少出现在标准支付字段值中。若业务确需在字段内包含竖线,必须使用双反斜杠 \\| 转义,转义序列本身不计入字段值长度,但计入字符串总长度。字符集白名单中显式排除了 NULL (0x00)、DEL (0x7F) 以及所有 CR/LF 类控制字符,防止注入式解析歧义。