Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
70 lines
2.1 KiB
Go
70 lines
2.1 KiB
Go
package securityaudit
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
)
|
|
|
|
func BuildIssueSummaries(result NormalizedResult) []IssueSummary {
|
|
resultCategories := result.Categories
|
|
if len(resultCategories) == 0 {
|
|
resultCategories = result.MatchedScanners
|
|
}
|
|
summaries := make([]IssueSummary, 0, len(resultCategories)+len(result.UnknownCategories))
|
|
for _, category := range resultCategories {
|
|
definition, ok := ScannerCatalog[category]
|
|
if !ok {
|
|
continue
|
|
}
|
|
evidence := RedactPreview(result.ScannerEvidence[category], 160)
|
|
if evidence == "" {
|
|
evidence = definition.Label
|
|
}
|
|
digest := sha256.Sum256([]byte(evidence))
|
|
summaries = append(summaries, IssueSummary{
|
|
Category: category, ScannerID: category, Title: definition.LabelZH,
|
|
Description: definition.Description, Severity: string(result.RiskLevel),
|
|
SeverityLabel: riskLabelZH(result.RiskLevel), Action: string(result.Action),
|
|
ActionLabel: actionLabelZH(result.Action), Code: "prompt_audit_" + category,
|
|
Score: result.ScannerScores[category], Evidence: evidence,
|
|
EvidenceHash: hex.EncodeToString(digest[:]),
|
|
})
|
|
}
|
|
for _, category := range result.UnknownCategories {
|
|
evidence := "unknown_unsafe"
|
|
digest := sha256.Sum256([]byte(evidence + ":" + category))
|
|
summaries = append(summaries, IssueSummary{
|
|
Category: category, ScannerID: "unknown_unsafe", Title: "未知高风险分类",
|
|
Description: "审计节点返回了未知但不可忽略的高风险分类", Severity: string(RiskCritical),
|
|
SeverityLabel: riskLabelZH(RiskCritical), Action: string(ActionBlock),
|
|
ActionLabel: actionLabelZH(ActionBlock), Code: "prompt_audit_unknown_unsafe",
|
|
Score: 1, Evidence: evidence, EvidenceHash: hex.EncodeToString(digest[:]),
|
|
})
|
|
}
|
|
return summaries
|
|
}
|
|
|
|
func riskLabelZH(risk RiskLevel) string {
|
|
switch risk {
|
|
case RiskCritical:
|
|
return "严重"
|
|
case RiskHigh:
|
|
return "高"
|
|
case RiskMedium:
|
|
return "中"
|
|
default:
|
|
return "低"
|
|
}
|
|
}
|
|
|
|
func actionLabelZH(action Action) string {
|
|
switch action {
|
|
case ActionBlock:
|
|
return "阻止"
|
|
case ActionWarn:
|
|
return "警告"
|
|
default:
|
|
return "允许"
|
|
}
|
|
}
|