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。
[](https://crates.io/crates/secfinding)
[](https://docs.rs/secfinding)
标签:GPT, Rust, SARIF, 代码库, 可视化界面, 安全工具开发, 数据结构, 漏洞管理, 网络流量审计, 通知系统