sensitive-print-scan

star 0

通用敏感信息打印/日志/落盘 白盒安全测试。扫描源码中打印密码、密钥、Token、SessionID、MAC、IP等敏感信息的代码位置。支持ArkTS、TypeScript、JavaScript、Vue、Java、Python、Go、C/C++、C#、Swift、PHP、Ruby等多语言。当用户提到"敏感信息打印"、"日志泄露"、"打印密码"、"日志安全审计"、"敏感信息落盘"、"hilog隐私标识"、"console.log敏感"、"白盒测试打印"、"敏感信息泄露检视"时触发此skill。采用逐文件subagent独立测试+即时落盘策略,避免上下文溢出。

honglux By honglux schedule Updated 5/29/2026

name: sensitive-print-scan description: 通用敏感信息打印/日志/落盘 白盒安全测试。扫描源码中打印密码、密钥、Token、SessionID、MAC、IP等敏感信息的代码位置。支持ArkTS、TypeScript、JavaScript、Vue、Java、Python、Go、C/C++、C#、Swift、PHP、Ruby等多语言。当用户提到"敏感信息打印"、"日志泄露"、"打印密码"、"日志安全审计"、"敏感信息落盘"、"hilog隐私标识"、"console.log敏感"、"白盒测试打印"、"敏感信息泄露检视"时触发此skill。采用逐文件subagent独立测试+即时落盘策略,避免上下文溢出。

敏感信息打印/日志/落盘 通用白盒安全测试技能

本 skill 对源码项目执行敏感信息泄露审计:检测密码、密钥、Token 等鉴权凭据是否被打印到日志、控制台或明文写入文件/存储。


一、核心流程(4 阶段,不可跳过)

[阶段1: 向用户确认参数] → [阶段2: 生成测试计划] → [阶段3: 用户确认计划] → [阶段4: 逐文件执行测试]

二、阶段 1:参数确认(必须完成)

此阶段不可跳过,不可自行推断用户意图。

2.1 第 1 轮提问(必问)

逐一提问以下问题,每次 1~2 个:

  1. 请提供需要扫描的根目录路径(绝对路径)。例如:D:\project\src\/home/user/project/
  2. 测试计划和结果文件输出到哪个目录?例如:TestPlan\SensitivePrintTest\

等待用户回复后,继续第 2 轮。

2.2 第 2 轮提问(确认)

  1. 以下目录/文件类型将自动排除,是否需要额外排除项?
    • 自动排除:*.md*.png*.svg*.jpg*.gif*.ico*.css*.scss*.less*.d.tsnode_modules/dist/build/.git/
  2. 是否有特定的编码规范文件(如 CLAUDE.md)需要参考?如有,请提供路径。

2.3 第 3 轮提问(可选)

  1. 是否仅扫描特定语言的文件?(如仅 .ets.ts)默认:扫描所有支持的源码文件
  2. 是否有已知的高风险文件需要重点关注?如有,请列出。

三、阶段 2:生成测试计划

参数确认完毕后,先探索目录结构,然后按以下模板生成测试计划文档。

3.1 探索目录结构

列出根目录下的所有子目录和源码文件,统计文件数量。
按语言/模块分组,优先排列高风险模块(安全模块、认证模块、网络通信模块)。

3.2 测试计划文档模板

输出文件:{输出目录}/SensitivePrintTestPlan.md

测试计划必须包含以下核心内容:

(1) 测试概述

  • 测试目的:检测敏感信息打印/日志/落盘问题
  • 测试范围:明确列出包含和排除的目录/文件类型
  • 测试方法概述:搜索打印/日志/写文件函数 → 识别敏感变量 → 追溯变量来源 → 应用分级规则 → 输出发现

(2) 敏感信息等级定义

等级 类型 示例
P0 致命 密码明文、密钥明文、Token(ak/sk)、SessionID、证书私钥、硬编码凭据 password = "admin123"
P1 高危 加密密文、Authorization/WWW-Authenticate头、nonce/random、MAC地址、完整API请求/响应体 Authorization: Digest ...
P2 中危 IP地址、设备SN、用户名/手机号/邮箱、cameraCode、设备配置JSON ip=192.168.1.1
P3 低危 文件路径、端口号、HTTP方法、状态码、字符串长度 port=8080

(3) 等级判定补充规则(核心防误报规则)

必须逐条检查和应用以下规则:

规则 A — 隐私标识降级规则:若代码已使用脱敏标识(如 ArkTS %{private}s、Java %mask%),P0→P1,P1→P2,P2→无发现

规则 B — Error 对象豁免规则:仅打印 err.message / e.getMessage() / str(e) 等异常消息且无敏感数据拼接的,不标记

规则 C — 禁止变量名推测规则:禁止仅凭变量名(key/result/data/url/info)判定为敏感。必须在文件内搜索追溯变量的实际赋值来源

规则 D — 不确定标记规则:无法在文件内完成追溯的,标注 [待确认] 不得给确定等级

规则 E — 响应体打印规则:打印完整 API 请求体/响应体(JSON.stringify 或等价操作)→ 无论是否脱敏,最低标记 P1

(4) 测试执行策略

明确说明以下策略:

主 Agent 循环:
  对文件列表中的每个文件:
    1. 创建独立 subagent,加载当前文件
    2. subagent 分析完毕,返回结构化发现
    3. 主 Agent 将结果追加写入结果文件
    4. 释放 subagent,继续下一个文件

(5) 文件分组

按优先级将文件分为若干组:

  • 第1组(高风险优先):安全模块、加密模块、认证模块
  • 第2组:网络通信模块、API 调用模块
  • 第3组:业务处理模块、Handler/Controller
  • 第4组:服务层、工具类
  • 第5组:视图层、组件(前端项目)
  • 第6组(低风险快速扫描):数据模型/类型定义/枚举常量

每组标注预估文件数量和需要深度检查的重点文件。

(6) 输出格式规范

每条发现必须包含以下字段(详细模板见阶段 4 的 Subagent Prompt 模板):

  • 代码片段:实际代码 + 前后各 2 行上下文
  • 敏感变量追溯:变量名 → 赋值来源 → 实际类型
  • 打印内容(强制):明确列出实际被打印的信息。若为请求体/响应体/对象,逐字段列出其含有的字段名和类型;若无法追溯体内容,须声明原因
  • 风险描述脱敏状态等级调整

3.3 生成计划后暂停

生成计划后,必须暂停并提示用户:

测试计划已生成:{输出目录}/SensitivePrintTestPlan.md。请审核计划内容,确认后我将按计划逐文件执行测试。是否继续?


四、阶段 3:用户确认计划

等待用户审核测试计划。用户可能要求修改以下内容:

  • 调整扫描范围(增加/排除目录)
  • 修改等级定义或判定规则
  • 调整文件分组和优先级
  • 补充重点关注文件

收到用户确认后,进入阶段 4。


五、阶段 4:执行测试

5.1 初始化

  1. 创建结果文件:{输出目录}/SensitivePrintTestResult.md
  2. 写入结果文件头部:
# 敏感信息打印/日志/落盘 白盒测试结果

> 测试日期: YYYY-MM-DD
> 测试引擎: [当前引擎名称]
> 测试范围: [根目录路径]
> 发现总数: [测试完成后统计]

---
  1. 读取测试计划,获取文件清单

5.2 逐文件测试循环

对每个文件,执行:

  1. 发起 subagent:创建独立上下文的 subagent,传入下述 prompt 模板
  2. 等待完成:主 Agent 不加载被测文件,仅收集 subagent 返回
  3. 追加落盘:立即将 subagent 返回追加写入 SensitivePrintTestResult.md
  4. 释放资源:完成一个文件后释放 subagent,再处理下一个

5.3 Subagent Prompt 模板

你是白盒安全测试 agent,请对以下文件进行敏感信息打印/日志审计。

## 文件信息
- 文件路径: {文件路径}
- 编程语言: {语言}

## 测试要求
1. 读取文件全部内容,逐行审阅
2. 搜索所有打印/日志/落盘函数的调用(见下方语言模式)
3. 识别参数中的敏感变量
4. **对每个疑似敏感变量,在文件内部追溯其赋值来源**(搜索变量定义、赋值语句、函数参数)
5. **若打印内容为请求体/响应体/对象:必须追溯该对象的具体字段结构**(搜索类型定义、接口定义、构造函数),明确列出体中实际包含的敏感字段名和类型。若无法确认,显式声明"无法追溯体内容"
6. 应用等级判定规则分级,并应用调整规则 A~F

## 等级定义
P0(致命): 密码明文、密钥明文、Token(ak/sk)、SessionID、证书私钥、硬编码凭据
P1(高危): 加密密文、Authorization/WWW-Authenticate头、nonce/random、MAC、完整请求/响应体
P2(中危): IP地址、设备SN、用户名/邮箱/手机、cameraCode、设备配置JSON
P3(低危): 文件路径、端口号、HTTP方法、状态码

## 调整规则(必须逐条检查并应用)
A. 若已使用脱敏标识(如%{private}s) → P0降P1, P1降P2, P2降为无发现
B. 仅打印err.message且无敏感数据拼接 → 不标记
C. 禁止仅凭变量名判定 → 必须在文件内追溯实际赋值来源
D. 无法在文件内确认的 → 标注[待确认],不给确定等级
E. 打印完整请求/响应体(JSON.stringify) → 最低标记P1
F. 凡发现涉及请求体/响应体/对象打印的 → 必须追溯体中的具体字段。在"打印内容"中逐字段列出(如 body.password(密码明文)、body.sn(设备SN)、body.mac(MAC地址))。若类型定义为外部/跨文件无法追溯,标注"无法追溯体内容:[原因]"并降为[待确认]

## 语言模式参考
参考附件:references/language-patterns.md

## 输出格式
每个发现必须包含以下完整字段。**"打印内容"字段是强制项,必须明确列出实际被打印的信息**:

### [P等级] {文件路径}:{行号}
**代码片段**:
```语言
(实际代码,前后各2行上下文)

敏感变量追溯: 变量名 → 第X行赋值为[具体来源] → 实际类型为[密码明文/Token/IP/...] 打印内容: [明确描述实际打印/输出的信息。若为请求体/响应体/对象,必须逐字段列出:字段1(类型)、字段2(类型)...。若无法追溯体内容,必须写明原因,如"无法追溯体内容:bean定义在外部依赖中"] 风险描述: 一句话 脱敏状态: [已使用xxx脱敏 / 未脱敏] 等级调整: 原始P? → 调整后P?(原因:规则X)

无发现则输出:✅ {文件路径} — 未发现敏感打印

输出示例

### [P1] service/NvrAddCameraService.ets:586
**代码片段**:
```typescript
const body = { password: pwd, username: user, mac: device.mac }
hilog.info(DOMAIN, TAG, 'body=%{public}s', JSON.stringify(body))

敏感变量追溯: body → 第585行构造 → password来自参数pwd(密码明文), username来自参数user, mac来自device.mac 打印内容: body.password(设备密码明文)、body.username(用户名)、body.mac(MAC地址) 风险描述: 密码明文通过%{public}s打印到日志 脱敏状态: 未脱敏(使用%{public}s) 等级调整: 原始P0 → 调整后P0(规则F:body.password为密码明文,维持P0)


### 5.4 主 Agent 的职责

主 Agent 在测试执行阶段:
- **不加载被测文件内容**(防止上下文溢出)
- 调度 subagent,传递文件路径和 prompt
- 收集 subagent 返回的结构化结果
- 每收到一个结果,立即追加写入结果文件
- 跟踪进度(已完成/剩余文件数)
- 对标记 `[待确认]` 的发现,判断是否需要跨文件追溯

### 5.5 完成阶段

全部文件测试完成后,主 Agent 在结果文件末尾追加:

```markdown
## 统计汇总

| 等级 | 发现数量 |
|------|---------|
| P0 致命 | N |
| P1 高危 | N |
| P2 中危 | N |
| P3 低危 | N |
| **总计** | **N** |

- 测试文件总数: N
- 有发现文件数: N
- 无发现文件数: N

### P0致命问题清单
| 序号 | 文件 | 行号 | 问题简述 |
|------|------|------|---------|

> 测试完成时间: YYYY-MM-DD HH:MM

六、Post-Test 结果审核指南

测试完成后,主 Agent 应自行对结果执行质量审核:

  1. 等级合理性:扫描所有 P0,确认已应用规则 A(脱敏标识降级)
  2. err.message 误报:扫描是否有仅打印异常消息被标记的发现(规则 B 应排除)
  3. 变量名猜测:扫描是否有仅凭变量名没有追溯的发现(规则 C 违规)
  4. 追溯完整性:每个发现是否包含"变量 → 行号 → 赋值来源 → 实际类型"
  5. 代码片段:每个发现是否附带了实际代码
  6. 大文件覆盖:对于超过 20KB 且涉及认证/密码逻辑的文件,发现数量是否显著偏少
  7. 打印内容字段(新增):每个发现是否包含"打印内容"字段。对于请求体/响应体相关发现,是否追溯到了体中的具体敏感字段(规则 F);若显示"无法追溯",原因是否合理
  8. 体内容追溯深度(新增):扫描所有"打印请求体/响应体"类发现,检查是否仅写了"打印请求体"而未说明体中的具体字段。若体内容无法追溯,是否标注了原因

审核后,在结果文件中追加审核结论,标注需修正的发现。


七、语言模式参考

详细的语言特定打印和写文件函数模式,请读取 references/language-patterns.md

八、注意事项

  • 分步落盘是核心策略:不等待全部完成才写入,每个文件完成后立即追加
  • 测试计划中明确声明:将测试细分为每个小模块,完成一个后落盘,再测试下一个
  • 不关注文档文件:所有 .md 及其他非源码文件不在测试范围内
  • 先计划后执行:不可跳过计划阶段直接测试
  • subagent 的独立性:每个 subagent 独立上下文,不依赖前一 subagent 的结果
Install via CLI
npx skills add https://github.com/honglux/SELF_SKILLs --skill sensitive-print-scan
Repository Details
star Stars 0
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator