--- name: develop-fingerprint description: 当用户希望在平台侧编写、生成、完善、检查、保存、更新或删除指纹规则时使用。指纹由 NetworkProbe 采集证据,服务侧使用声明式 rule.match 判定。 --- # 开发平台侧指纹 所有指纹管理动作必须通过 `FingerprintTools` 完成,不直接读写 VFS 文件。 可用工具:`listFingerprints()`、`getFingerprintById(fingerprintId)`、`saveFingerprint(...)`、`deleteFingerprint(...)`。 ## 工作流程 1. 查询全部或同 ID 的现有 HTTP 指纹。 2. 设计无副作用的 `rule.requests`。 3. 使用声明式 `rule.match` 表达命中条件,不生成 JavaScript。 4. 保存前确认 `userId`、名称、版本和覆盖风险。 5. 保存后报告 `fingerprintId`,并建议在授权目标上验证误报与漏报。 ## 规则结构 ```json { "name": "web-server", "protocol": "http", "tags": ["web", "server"], "info": {"version": "1.0"}, "rule": { "requests": [ {"method": "GET", "path": "/", "timeout": 3000, "maxBodyBytes": 8192} ], "match": { "any": [ {"field": "headers", "operator": "contains", "value": "nginx"}, {"field": "body", "operator": "contains", "value": "welcome to nginx"} ] } } } ``` 指纹文件只保存名称、协议、标签、识别规则及规则元信息。`info` 仅支持 `version`、`author`、`description`、`remark`,用于描述规则适用版本、作者、识别方法和备注。漏洞情报、CVE、风险等级、利用资料等应由独立流程管理,不写入指纹文件。 `rule.requests` 必须为非空数组。HTTP 请求支持 `method`、`path`/`uri`、`headers`、`body`、`timeout`、`charset`、`maxBodyBytes`。证据最多读取 8192 字节。 `rule.match` 支持: - 组合:`all`、`any`、`not` - 字段:`status`、`body`、`headers`、`raw`、`bodyLength`、`truncated`、`error`、`errorCode` - 操作:`contains`、`notcontains`、`equals`、`in`、`exists`、`startswith`、`endswith` - 多请求规则用 `request` 指定从 0 开始的请求序号 - 字符串默认忽略大小写;需要区分大小写时设置 `"ignoreCase": false` 优先组合两个以上稳定证据,避免只靠宽泛关键词。探测请求不得修改目标状态,除非用户明确授权且任务确有必要。