maiductuan/code-security-scanner
GitHub: maiductuan/code-security-scanner
一款开源的多语言代码安全与质量扫描 CLI 工具,结合 SAST、SCA 和机密检测,通过 AST 语义分析降低误报率,旨在替代商业 SAST 方案。
Stars: 1 | Forks: 0
# 🚀 DeepScan:终极开源 SAST 与 DevSecOps 扫描器
**商业 SAST 工具的 100% 免费极速替代方案。**
*零误报架构 • 基于 AST 的上下文分析 • AI 自动修复*
[](https://www.npmjs.com/package/deepscan-cli)
[](https://opensource.org/licenses/MIT)
[](https://nodejs.org)
[](http://makeapullrequest.com)
[](https://github.com/topics/devsecops)
**DeepScan** 是一款为现代 DevSecOps 流水线打造的下一代开源安全与代码质量扫描器。它将**静态应用安全测试 (SAST)**、**软件组成分析 (SCA)** 和**机密检测**结合到一个极速的 CLI 工具中。
厌倦了像 SonarQube、Checkmarx 或 Semgrep 这样的商业工具让你的 CI/CD 充斥着误报?DeepScan 使用 **Tree-sitter AST 解析**和**语义上下文分析**,与传统的基于正则表达式的扫描器相比,能减少 80% 以上的错误警报。
## ✨ 为什么选择 DeepScan?(功能特性)
### 🛡️ 企业级 SAST(静态分析)
- **注入检测** — 捕获 SQLi、命令注入、代码注入和 SSRF。
- **XSS 与前端安全** — 深度 DOM 分析(`innerHTML`、`document.write`、React/Vue sink)。
- **高级机密检测** — 标记硬编码密码、API key 和高熵 token,且无测试文件干扰。
- **加密与认证** — 防止弱哈希 (MD5/SHA1)、不安全的 JWT 以及会话配置错误。
### 📊 代码质量与整洁代码
- **复杂度分析** — 强制执行圈复杂度与认知复杂度限制。
- **代码重复** — 基于 AST 的语义重复检测。
- **代码异味** — 捕获魔法数字、空 catch 块和技术债务 (TODO/FIXME)。
### 🔗 SCA 与依赖扫描(供应链安全)
- **通用包支持** — npm、pip、Maven、Go modules、Cargo、Composer、RubyGems。
- **OSV 数据库集成** — 使用 Google 的开源漏洞 (OSV) 进行实时漏洞检查。
### 🧠 下一代能力(“秘密武器”)
- **基于 AST 降低误报** — DeepScan 理解代码。它知道测试夹具中的密码与生产代码中的密码之间的区别。
- **跨文件污点追踪** — 跟踪用户输入,从路由处理程序一直到数据库 sink。
- **AI 辅助修复** — 本地 或云端 LLM 集成,自动建议修复方案并剔除边缘案例的误报。
### 🌍 通用语言支持
无需安装 10 种不同的工具即可扫描整个 monorepo:
`JavaScript`、`TypeScript`、`Python`、`Java`、`Go`、`C/C++`、`C#`、`PHP`、`Ruby`、`Rust`、`Kotlin`、`Swift`
## 🚀 快速开始
### 安装
从 [npm](https://www.npmjs.com/package/deepscan-cli) 全局安装:
```
npm install -g deepscan-cli
```
### 基本用法
```
# 初始化配置
deepscan init
# 扫描当前目录
deepscan scan
# 扫描特定路径
deepscan scan ./src
# 扫描并输出特定格式
deepscan scan ./src --format json --output results.json
```
### 输出格式
```
# Console (默认) — 优美的终端输出
deepscan scan ./src
# JSON — 机器可读
deepscan scan ./src --format json
# CSV — 兼容电子表格
deepscan scan ./src --format csv --output results.csv
# HTML — 交互式仪表板报告
deepscan scan ./src --format html --output report.html
# SARIF — 兼容 GitHub Code Scanning
deepscan scan ./src --format sarif --output results.sarif
```
## ⚙️ 配置
在项目根目录下创建一个 `.deepscan.yml`:
```
version: "1.0"
scanners:
security:
enabled: true
severity: [critical, high, medium]
quality:
enabled: true
thresholds:
maxComplexity: 15
maxFileLength: 500
maxFunctionLength: 50
cve:
enabled: true
sources: [osv]
failOnSeverity: critical
rules:
include: ["*"]
exclude:
- quality/console-log
custom:
- ./my-rules/*.yml
paths:
exclude:
- node_modules/**
- dist/**
- "**/*.test.ts"
output:
format: json
file: deepscan-results.json
# AI Validation (可选,默认关闭)
ai:
enabled: false
provider: openai # openai, anthropic, ollama
```
### 预设
```
# 为常见项目类型使用 preset
deepscan scan --preset node-api
deepscan scan --preset python-web
deepscan scan --preset java-spring
deepscan scan --preset minimal
```
## 📝 自定义规则
以 YAML 格式创建自定义规则:
```
# my-rules/no-eval.yml
rules:
- id: custom/no-eval
name: "Prohibit eval() usage"
description: "eval() is dangerous and should never be used"
category: security
severity: high
confidence: high
cwe: [CWE-95]
languages: [javascript, typescript]
patterns:
- regex: "\\beval\\s*\\("
message: "eval() usage detected"
fix:
description: "Use JSON.parse() or a safe parser"
tags: [injection]
references:
- https://cwe.mitre.org/data/definitions/95.html
```
```
# 使用自定义规则
deepscan scan --rules ./my-rules/
```
## 🔧 CLI 参考
### 扫描命令选项 (`deepscan scan`)
| 选项 | 快捷方式 | 描述 | 默认值 | 示例 |
| :--- | :--- | :--- | :--- | :--- |
| `--scanners
` | `-s` | 要运行的扫描器引擎的逗号分隔列表 (`security`, `quality`, `cve`) | `security,quality,cve` | `deepscan scan -s security,cve` |
| `--security` | 无 | 仅运行安全扫描器 | 无 | `deepscan scan --security` |
| `--quality` | 无 | 仅运行质量扫描器 | 无 | `deepscan scan --quality` |
| `--cve` | 无 | 仅运行 CVE/依赖扫描器 | 无 | `deepscan scan --cve` |
| `--format ` | `-f` | 输出格式:`json`、`csv`、`html`、`sarif`、`console` | `console` | `deepscan scan -f html` |
| `--output ` | `-o` | 输出文件路径(将扫描结果写入文件) | 标准输出 / 控制台 | `deepscan scan -o report.html` |
| `--severity `| 无 | 按严重程度过滤发现结果 (`critical`, `high`, `medium`, `low`) | 全部 | `deepscan scan --severity critical,high` |
| `--include `| 无 | 包含文件模式(逗号分隔的 glob) | 所有文件 | `deepscan scan --include "src/**/*.ts"` |
| `--exclude `| 无 | 排除文件模式(逗号分隔的 glob) | 配置默认值 | `deepscan scan --exclude "tests/**"` |
| `--rules ` | 无 | 自定义规则目录的路径 | 无 | `deepscan scan --rules ./custom-rules` |
| `--deep` | 无 | 启用深度分析(污点追踪、语义分析) | `false` | `deepscan scan --deep` |
| `--ai` | 无 | 启用 AI 辅助验证(需要 API key) | `false` | `deepscan scan --ai` |
| `--ai-provider ` | 无 | AI 提供商:`openai`、`anthropic`、`ollama` | `openai` | `deepscan scan --ai --ai-provider ollama` |
| `--parallel ` | 无 | 并行执行的 worker 数量 | `4` | `deepscan scan --parallel 8` |
| `--incremental` | 无 | 仅扫描更改的文件(基于 git) | `false` | `deepscan scan --incremental` |
| `--preset ` | 无 | 使用预设配置 (`node-api`, `python-web`, `java-spring`, `minimal`) | 无 | `deepscan scan --preset node-api` |
| `--config ` | 无 | 配置文件的路径 | `.deepscan.yml` | `deepscan scan --config ./deepscan-ci.yml` |
### CLI 子命令
```
# 规则管理
deepscan rules list # List all loaded rules
deepscan rules list --category injection # Filter rules by category
deepscan rules low security/sql-injection # Show detailed rule details
deepscan rules categories # Show all available categories
# 配置
deepscan init # Initialize standard config file
deepscan init --preset node-api # Initialize config with preset
# 报告转换
deepscan report convert results.json --to html --output report.html
```
## 🤖 AI 辅助验证
启用 AI 验证以减少误报(可选):
```
# 设置 API key
export OPENAI_API_KEY=sk-...
# 或
export ANTHROPIC_API_KEY=sk-ant-...
# 运行 AI validation
deepscan scan --ai --ai-provider openai
# 或使用本地 Ollama
deepscan scan --ai --ai-provider ollama
```
```
# .deepscan.yml
ai:
enabled: true
provider: openai # or anthropic, ollama
model: gpt-4o-mini
maxFindings: 20
```
## 🏗️ 架构
```
CLI → Pipeline → File Discovery → Language Detection
↓
Scanner Engines (parallel)
├── Security Scanner (patterns, taint, context)
├── Quality Scanner (complexity, duplication, metrics)
└── CVE Scanner (dependency parsing, OSV query)
↓
Rule Engine (built-in + custom YAML rules)
↓
[Optional] AI Validator
↓
Reporter (JSON / CSV / HTML / SARIF / Console)
```
## 📊 对比
| 功能 | DeepScan | SonarQube | Semgrep | Trivy |
|---------|----------|-----------|---------|-------|
| SAST | ✅ | ✅ | ✅ | ❌ |
| SCA/CVE | ✅ | ✅ | ❌ | ✅ |
| Secrets | ✅ | ✅ | ✅ | ✅ |
| 感知上下文 | ✅ | ❌ | ❌ | ❌ |
| 污点分析 | ✅ | ✅ | ✅ | ❌ |
| AI 验证 | ✅ | ❌ | ✅ | ❌ |
| 零基础设施 | ✅ | ❌ | ✅ | ✅ |
| 自定义规则 (YAML) | ✅ | ❌ | ✅ | ❌ |
| HTML 报告 | ✅ | ✅ | ✅ | ✅ |
| SARIF 输出 | ✅ | ✅ | ✅ | ✅ |
| 免费且开源 | ✅ | 部分免费 | 部分免费 | ✅ |
## 🛠️ 开发者与源码指南
本节面向希望从源码运行 DeepScan、贡献代码、修改规则处理脚本或调试 CLI 行为的开发者和用户。
### 前置条件
- Node.js >= 18.0.0
- npm 或 yarn
### 设置
克隆仓库并安装所有依赖:
```
git clone https://github.com/your-org/code-scan-security.git
cd code-scan-security
npm install
```
### 从源码运行
你可以使用 JIT 编译,直接从源码执行 DeepScan,而无需构建步骤。
```
# 常规扫描
npm run dev -- scan ./src
# 使用特定 flags 扫描 (例如:仅 security-only、JSON 输出)
npm run dev -- scan ./src --security --format json
# 运行规则列表
npm run dev -- rules list
```
或者,你可以使用 `npx` 运行(它不需要 `--` 分隔符):
```
npx tsx src/bin/deepscan.ts scan ./src --security
```
### 构建 CLI
要将代码库编译为纯 JavaScript 以用于生产环境测试或分发:
```
npm run build
```
这会将 TypeScript 源文件编译到 `dist/` 目录中:
- `dist/bin/deepscan.js`(可执行入口点)
- `dist/index.js`(库导出)
运行编译后的 JavaScript CLI 包:
```
node dist/bin/deepscan.js scan ./src
```
### 测试、Lint 和类型检查
在进行更改之前,请验证测试和静态分析是否通过。
```
# 运行所有测试一次
npm run test
# 在 watch 模式下运行测试
npm run test:watch
# Typecheck TypeScript 文件
npm run typecheck
# Lint 代码库 (ESLint)
npm run lint
```
### 规则与脚本开发
- 要测试转换单个 Semgrep 规则文件:
npx tsx scripts/convert-rules.ts --input tests/fixtures/semgrep-sample.yml --output rules/built-in/converted-semgrep.yml
- 要运行完整的自动下载/转换脚本:
1. 在 [scripts/update-rules.ts](file:///d:/code/code-scan-security/scripts/update-rules.ts) 中进行修改。
2. 执行更新脚本:
npm run rules:update
3. 运行测试套件:
npm run test
## 📊 基准测试与准确性结果
为了验证 DeepScan 的检测能力,我们在 `examples/` 目录中维护了一个真实的多语言 monorepo 基准测试。它包含易受攻击的 controller、web 视图、动态路由和依赖清单,以及与之对应的 **Node/Express/NestJS**、**Python/Flask/Django**、**Go/net/http** 和 **PHP/Laravel** 安全代码。
我们的自动化评估框架衡量**召回率**(对真实漏洞的检测覆盖率)和**精确率**(避免对干净代码产生误报)。
### 最新基准测试结果 (v1.0)
- **真实漏洞总数**:29
- **召回率(检测率)**:**100.0%**(捕获 29/29 个漏洞)
- **精确率(误报率)**:**100.0%**(触发 0 次误报)
- **F1 分数**:**100.0%**
#### 语言细分
| 语言 / 框架 | 预期漏洞 | 已捕获 (TP) | 遗漏 (FN) | 误报 (FP) | 准确率 (召回率) |
|----------------------|---------------|-------------|-------------|-------------------|-------------------|
| **JavaScript / TypeScript (Express, NestJS)** | 13 | 13 | 0 | 0 | **100.0%** |
| **Python (Flask, Django)** | 7 | 7 | 0 | 0 | **100.0%** |
| **Go (net/http)** | 3 | 3 | 0 | 0 | **100.0%** |
| **Java (Maven, 标准)** | 3 | 3 | 0 | 0 | **100.0%** |
| **PHP (Laravel, Blade)** | 3 | 3 | 0 | 0 | **100.0%** |
要运行准确性评估脚本并生成交互式 [evaluation-report.html](file:///d:/code/code-scan-security/evaluation-report.html) 仪表板:
```
npm run evaluate
```
## 📚 文档
有关详细的设置和操作说明,请参阅:
- [管理员指南](file:///d:/code/code-scan-security/docs/admin-guide.md) — 系统配置、自动规则集更新、CLI 选项参考以及规则分发。
## 📄 许可证
MIT © DeepScan 贡献者
标签:DevSecOps, GNU通用公共许可证, IPv6支持, MITM代理, Node.js, 上游代理, 代码质量分析, 依赖扫描, 暗色界面, 模型提供商, 自动化攻击, 静态应用安全测试