Sub2API v1.0 - AI API 网关(二开初始版本,基于上游 Wei-Shaw/sub2api)
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
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
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
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 "允许"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user