Open-Lab-s/Scanr
GitHub: Open-Lab-s/Scanr
一个用 Rust 编写的开源 DevSecOps 安全引擎,提供依赖漏洞扫描、许可证合规检查与 SBOM 生成,支持离线模式与 CI 策略强制执行,可嵌入开发工作流实现供应链安全的确定性管控。
Stars: 0 | Forks: 0
# Scanr
[](https://github.com/Open-Lab-s/Scanr/releases)
[](https://www.npmjs.com/package/@openlabs/scanr_cli)
[](https://www.npmjs.com/package/@openlabs/scanr_cli)
[](https://github.com/Open-Lab-s/homebrew-tap)
[](https://crates.io/crates/scanr-cli)
[](LICENSE)
## 🔭 愿景
Scanr 是一个多引擎安全框架,专为需要确定性安全检查但不愿受制于 SaaS 锁定的团队而构建。
其设计围绕:
- 主权
- 离线能力
- 透明的本地执行
- 引擎优先的可扩展性
- 确定性的 CI 强制执行
## 🧱 架构
```
scanr-engine Unified engine contracts and finding model
scanr-sca Software composition analysis engine (production-ready)
scanr-cli CLI + TUI interface
scanr-container Container engine (planned)
scanr-iac IaC engine (planned)
scanr-sast SAST engine (planned)
scanr-secrets Secret scanning engine (planned)
scanr-server Self-hosted control plane (future)
scanr-dashboard Web UI (future)
```
## ✅ 当前可用功能 (v0.1.1)
- Node、Python 和 Rust 依赖解析
- 结合 CVE + 严重性数据的 OSV 漏洞匹配
- 修复建议和升级指引
- 基线跟踪 (`.scanr/baseline.json`)
- 项目本地 OSV 缓存 (`.scanr/cache`),支持离线/刷新模式
- 通过 `scanr.toml` 在 CI 中进行策略强制执行
- 确定性的退出代码 (`0`, `1`, `2`, `3`, `4`)
- CycloneDX SBOM 生成和 SBOM 差异对比
- SARIF + JSON + 原始 JSON 结构化输出
- Node 依赖路径追踪 (`scanr trace `)
- 带扫描控制的全屏 TUI
## 📦 安装渠道
```
# NPM
npm install -g @openlabs/scanr_cli
# BUN (使用 npm package)
bun install -g @openlabs/scanr_cli
# Homebrew
brew install Open-Lab-s/tap/scanr
# Cargo (crates.io)
cargo install scanr-cli --locked
# Curl 安装程序
curl -fsSL https://scanr.dev/install.sh | bash
```
## 🧩 我该使用哪个 Rust Crate?
- `scanr-cli`:如果你是终端用户并想使用 `scanr` 命令,请使用此项。
- `scanr-sca`:如果你正在构建 Rust 应用并希望嵌入 SCA 扫描逻辑,请使用此项。
- `scanr-engine`:如果你正在构建自己的引擎,或基于 Scanr 约定构建共享的策略/报告功能,请使用此项。
已发布的 Crates:
- `https://crates.io/crates/scanr-cli`
- `https://crates.io/crates/scanr-sca`
- `https://crates.io/crates/scanr-engine`
库集成示例:
```
[dependencies]
scanr-sca = "0.1.1"
scanr-engine = "0.1.1"
```
```
use std::path::Path;
use scanr_sca::ScaEngine;
#[tokio::main]
async fn main() -> Result<(), scanr_sca::ScanError> {
let engine = ScaEngine::new();
let result = engine.scan_detailed(Path::new(".")).await?;
println!("dependencies: {}", result.total_dependencies);
Ok(())
}
```
## 🛠️ 从源码运行 (克隆 + 本地测试)
```
# 1) Clone
git clone https://github.com/Open-Lab-s/Scanr.git
cd Scanr
# 2) Build release workspace
cargo build --workspace --release
# 3) Run without installing (dev run)
cargo run --package scanr-cli --bin scanr -- scan .
# 4) Install local CLI binary for testing (覆盖旧的本地安装)
cargo install --path crates/scanr-cli --force
# 5) 验证已安装的 CLI
scanr --version
scanr --help
```
可选验证:
```
cargo test --workspace
```
## ⚡ 快速开始
```
# 交互式 UI
scanr
# 核心扫描
scanr scan .
scanr scan . --ci
scanr scan . --json
scanr scan . --sarif
# caching and baseline
scanr scan . --offline
scanr scan . --refresh
scanr baseline save
scanr baseline status
scanr scan . --baseline --ci
# investigation + sbom
scanr trace minimatch
scanr sbom generate
scanr sbom diff old.cdx.json new.cdx.json
```
## 🗺️ 发布时间线
| 版本 | 主题 | 亮点 |
| --- | --- | --- |
| `v0.1.0` | 基础建设 | CLI 骨架、SCA 扫描、OSV 集成、建议、CI 策略、SBOM、SARIF/JSON、TUI、分发设置 |
| `v0.1.1` | 企业加固 | 基线/安全债务跟踪、OSV 缓存 + 离线模式、依赖追踪、许可证合规、引擎抽象 (`scanr-engine`) |
## 📈 产品时间线
| 阶段 | 版本 | 状态 | 成果 |
| --- | --- | --- | --- |
| 基础建设 | `v0.1.0` | 已完成 | 构建了 Scanr CLI + SCA 核心、CI 模式、SBOM、SARIF/JSON 输出、安装渠道 |
| 加固 | `v0.1.1` | 已完成 | 增加了基线、缓存/离线、追踪、许可证强制执行和引擎抽象 |
| 多引擎扩展 | `v0.2.x` | 计划中 | 添加容器引擎,随后在同一约定上添加 IaC/密钥/SAST 引擎 |
| 安全 OS 层 | `v1.x` | 计划中 | 自托管服务器、仪表板、组织策略管理和治理工作流 |
## ✅ 阶段清单 (源自路线图)
- [x] 阶段 1: 引擎稳定化 - SCA 引擎完成 (`scanr-sca`)
- [ ] 阶段 1: 引擎稳定化 - 容器引擎 (`scanr-container`)
- [ ] 阶段 1: 引擎稳定化 - IaC 引擎 (`scanr-iac`)
- [ ] 阶段 1: 引擎稳定化 - 密钥引擎 (`scanr-secrets`)
- [ ] 阶段 1: 引擎稳定化 - SAST 引擎 (`scanr-sast`)
- [x] 阶段 2: 本地安全套件 - CLI + TUI 基础完成
- [ ] 阶段 2: 本地安全套件 - 多引擎调用 UX
- [ ] 阶段 3: 安全 OS - `scanr-server` (自托管控制平面)
- [ ] 阶段 3: 安全 OS - `scanr-dashboard` (Web UI)
- [ ] 阶段 3: 安全 OS - SCM/GitHub 集成 + 组织治理
## ✅ 功能时间线 (已完成)
### `v0.1.0` 已交付
- CLI 命令系统 (`scan`, `sbom`, `trace` 基础)
- Node/Python/Rust 依赖解析
- 带修复提示的 OSV 漏洞查询
- 风险摘要和 CI 策略检查
- CycloneDX SBOM 生成和 SBOM 差异对比
- JSON/SARIF/原始 JSON 输出
- 交互式 TUI 体验
- npm/bun/homebrew/cargo/curl 打包
### `v0.1.1` 已交付
- 基线保存/状态/比较工作流
- 基线模式下 CI 中的安全债务增量行为
- 带 TTL 的项目本地 OSV 缓存
- 离线模式和强制刷新模式
- Node 依赖路径追踪
- 带专用退出语义的许可证策略强制执行
- 重构为 `scanr-engine` + `scanr-sca` 架构
## 🧠 工作区
```
F:\Scanr
├── crates/
│ ├── scanr-engine/
│ ├── scanr-sca/
│ └── scanr-cli/
├── installers/
├── docs/
├── Cargo.toml
└── mkdocs.yml
```
## 📚 文档
- [文档索引](docs/index.md)
- [安装](docs/installation.md)
- [Scanr CLI](docs/cli.md)
- [Scanr SCA](docs/core.md)
- [输出格式](docs/output-formats.md)
- [CI 策略](docs/ci-policy.md)
- [基线](docs/baseline.md)
- [缓存](docs/cache.md)
- [SBOM](docs/sbom.md)
- [TUI](docs/tui.md)
- [更新日志](docs/changelog.md)
本地运行文档:
```
mkdocs serve
```
标签:CI/CD 集成, CVE, CycloneDX, DevSecOps, DNS 反向解析, IaC 安全, Java RMI, OSV, Rust, SARIF, SAST, SBOM, StruQ, TUI, Vercel, Web截图, 上游代理, 云安全监控, 依赖扫描, 可视化界面, 安全基线, 安全引擎, 容器安全, 教学环境, 数字签名, 文档安全, 机密检测, 模型提供商, 盲注攻击, 硬件无关, 离线安全, 策略即代码, 网络流量审计, 聊天机器人安全, 自托管, 许可证合规, 软件开发工具包, 通知系统, 通知系统, 静态分析