santhreal/secfinding

GitHub: santhreal/secfinding

secfinding 是一个 Rust 库,为安全扫描器提供类型化的安全发现数据结构、严重程度枚举、证据类型和 Reportable trait,使不同扫描器的输出能统一接入报告管线。

Stars: 0 | Forks: 0

# 安全发现 一个类型化的安全发现。无需再传递那些可能存在也可能不存在字段的 JSON blob,你将获得一个带有 builder、合适的严重性级别、证据类型的 struct,以及一个允许任何扫描器的输出类型接入报告 pipeline 的 trait。 ``` use secfinding::{Finding, Severity}; let f = Finding::builder("my-scanner", "https://example.com", Severity::High) .title("SQL Injection") .detail("User input reaches database query unsanitized") .cve("CVE-2024-12345") .tag("sqli") .build() .unwrap(); assert_eq!(f.title, "SQL Injection"); ``` ## Reportable trait 你可能已经有了自己的发现类型。你不需要切换到我们的。只需实现 `Reportable`,你的类型就可以与 `secreport` 配合使用,以输出 SARIF/JSON/Markdown: ``` use secfinding::{Reportable, Severity}; struct MyFinding { name: String, sev: u8, } impl Reportable for MyFinding { fn scanner(&self) -> &str { "my-tool" } fn target(&self) -> &str { "target" } fn severity(&self) -> Severity { Severity::try_from(self.sev).unwrap() } fn title(&self) -> &str { &self.name } } ``` 四个必填方法。其余所有内容都有默认值。你的类型现在可以免费获得 SARIF 输出、JSON 序列化和 Markdown 报告。 ## 严重程度 五个级别:Info、Low、Medium、High、Critical。有序、可比较、可序列化。从字符串解析: ``` use secfinding::Severity; let s = Severity::try_from("high").unwrap(); // from &str let s = Severity::try_from(3u8).unwrap(); // from number (0=Info, 4=Critical) let s: Severity = Severity::try_from("critical").unwrap(); ``` ## 证据 附加到发现的类型化证明:HTTP 响应、代码片段、DNS 记录、banner 以及特定于扫描器的结构化变体(BOLA 探测、登录追踪、源码泄露等)。 对于非结构化或临时的证明,请使用 `Evidence::raw`(v0.4+): ``` use secfinding::Evidence; let ev = Evidence::raw("response excerpt: SQL syntax error near '1'"); ``` 结构化的 HTTP 证明: ``` use secfinding::Evidence; let ev = Evidence::HttpResponse { status: 500, headers: vec![], body_excerpt: Some("SQL syntax error near".into()), }; ``` ## Serialization 将发现直接序列化为 JSON,以用于 pipeline 或报告接收器: ``` use secfinding::{Finding, Severity}; let finding = Finding::builder("my-scanner", "https://example.com", Severity::Medium) .title("Verbose error page") .build() .unwrap(); let json = serde_json::to_string_pretty(&finding).unwrap(); assert!(json.contains("\"title\": \"Verbose error page\"")); ``` ## 过滤 按 severity、扫描器、tags 过滤发现: ``` use secfinding::{filter, FindingFilter}; let config = FindingFilter { min_severity: Some(Severity::Medium), ..Default::default() }; let filtered = filter(&findings, &config); ``` ## 贡献 欢迎提交 Pull request。没有哪个 crate 是完美无缺的。如果你发现了一个 bug、一个更好的 API,或者仅仅是一个粗糙的边缘情况,请提交一个 PR。我们会快速进行审查。 ## 许可证 MIT。版权所有 2026 CORUM COLLECTIVE LLC。 [![crates.io](https://img.shields.io/crates/v/secfinding.svg)](https://crates.io/crates/secfinding) [![docs.rs](https://docs.rs/secfinding/badge.svg)](https://docs.rs/secfinding)
标签:GPT, Rust, SARIF, 代码库, 可视化界面, 安全工具开发, 数据结构, 漏洞管理, 网络流量审计, 通知系统