如何将JSON漏洞数据转换为SARIF格式并解决GitHub Action验证错误
解决SARIF格式验证错误并完成漏洞数据转换
一、错误原因分析
这个错误的核心问题是你生成的SARIF文件包含了SARIF规范不允许的额外属性——大概率是转换时误加了空键名的字段,或是把自定义数据放在了SARIF规定的核心结构区域外,导致GitHub的验证器拒绝接受。
二、合规的SARIF转换结果
把你的漏洞数据转换成符合SARIF 2.1.0规范的格式,所有自定义字段都放在允许的properties区域内:
{ "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "version": "2.1.0", "runs": [ { "tool": { "driver": { "name": "自定义漏洞扫描工具", "version": "1.0.0", "informationUri": "https://example.com/scanner" } }, "results": [ { "ruleId": "API-DP9-2024", "message": { "text": "Bot Data Modification" }, "level": "error", "properties": { "id": "66c5b89700fbf372c2f1f182", "method": "post", "path": "/user", "severity": "High", "impact": "Vulnerablity" } } ] } ] }
关键映射说明:
ruleId对应原数据的type字段message.text对应原数据的label字段level根据严重度映射:High对应error、Medium对应warning、Low对应note- 所有原数据里的自定义字段(id、method等)都塞进
properties,这是SARIF专门留的自定义数据区域,不会触发验证错误
三、Shell脚本实现自动转换
用jq工具(GitHub Action的Ubuntu runner默认已预装)写脚本完成转换,确保格式完全合规:
# 假设原始漏洞数据存在vuln.json文件中,执行后生成合规的SARIF文件 jq ' { "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "version": "2.1.0", "runs": [ { "tool": { "driver": { "name": "自定义漏洞扫描工具", "version": "1.0.0", "informationUri": "https://example.com/scanner" } }, "results": [ { "ruleId": .type, "message": { "text": .label }, "level": (if .severity == "High" then "error" elif .severity == "Medium" then "warning" else "note" end), "properties": { "id": .id, "method": .method, "path": .path, "severity": .severity, "impact": .impact } } ] } ] }' vuln.json > vulnerabilities-results.sarif
注意:如果你的原始数据是从变量读取而非文件,只需把vuln.json换成对应的输入源即可,核心转换逻辑不变。
四、提前验证格式(可选)
可以用GitHub官方工具本地先验证SARIF是否合规:
npx @github/sarif-fix < vulnerabilities-results.sarif
如果没有报错,说明格式没问题,上传到GitHub Action就不会再触发验证错误了。
内容的提问来源于stack exchange,提问作者cloudnetwork
相关产品推荐
相关产品推荐

