Skip to content

🔢 canonicalize ​

🔢 规范化 · 🟢 stable

简介 ​

cvss canonicalize 把 CVSS 向量字符串重排为规范指标顺序(AV, AC, PR, UI, S, C, I, A, E, RL, RC, CR, IR, AR, MAV, MAC, MPR, MUI, MS, MC, MI, MA)。使用 --check 可在不改写向量的前提下测试其是否已是规范形态。

工作原理 ​

解析各指标并按固定的规范顺序重新输出;--check 跳过改写,只回答输入是否已是规范形式(退出码 0/1)。

用法 ​

bash
cvss canonicalize [vector-string] [flags]

Flags ​

Flag类型默认值说明
--checkboolfalse仅检查是否规范(退出码 0=是,1=否)
--formatstringtext输出格式:text 或 json
-h, --helpboolfalsecanonicalize 的帮助信息

--check 可用于脚本

--check 在向量已规范时退出 0,否则退出 1,可直接用于 shell 的 if 判断与 CI 卡点。

示例 ​

bash
cvss canonicalize "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
text
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
bash
cvss canonicalize --check "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
text
Canonical [PASS]

非规范示例

canonicalize "CVSS:3.1/S:U/C:H/I:H/A:H/AV:N/AC:L/PR:N/UI:N"(指标乱序)会把向量重写为规范顺序;配合 --check 会打印 Canonical [FAIL] 并以 1 退出。

底层 API ​

用 cvss.Canonicalize(str) 重排,用 cvss.IsCanonical(str) 实现 --check。

go
import (
    "fmt"

    "github.com/scagogogo/cvss-skills/pkg/cvss"
)

// 重排为规范顺序
canonical, err := cvss.Canonicalize("CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H")
if err != nil {
    log.Fatal(err)
}
fmt.Println(canonical)

// 仅检查
if cvss.IsCanonical("CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H") {
    fmt.Println("Canonical [PASS]")
}

相关 ​

  • parse — 也会规范化向量字符串(经解析器处理)
  • validate — 在重排前后做校验
  • SQL 与排序 — Go SDK 参考

基于 MIT 许可证发布。