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 自动修复* [![npm version](https://img.shields.io/npm/v/deepscan-cli.svg)](https://www.npmjs.com/package/deepscan-cli) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Node.js](https://img.shields.io/badge/Node.js-18+-green.svg)](https://nodejs.org) [![欢迎 PR](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](http://makeapullrequest.com) [![DevSecOps](https://img.shields.io/badge/Security-Shift--Left-blue)](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, 上游代理, 代码质量分析, 依赖扫描, 暗色界面, 模型提供商, 自动化攻击, 静态应用安全测试