| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 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 "允许"
- }
- }
|