nargo-audit
🎯 简介
nargo-audit 是 Nargo 编译工具链中的安全扫描组件,它通过对源码和项目配置进行静态分析,能够自动识别潜在的安全风险,包括硬编码的凭据、危险的第三方依赖以及不安全的代码编写模式。作为 Nargo 生态系统中的安全守护者,nargo-audit 确保应用在构建阶段就具备基本的安全性,为生产环境保驾护航。
✨ 核心特性
敏感信息扫描 (Secrets Scanning)
- 多模式识别: 内置多种正则匹配引擎,可识别 AWS Key、GitHub Token、私钥及通用的密码/密钥模式
- 智能检测: 采用机器学习算法减少误报,提高检测准确率
- 自定义规则: 支持用户自定义敏感信息检测规则
- 实时扫描: 开发过程中实时扫描,及时发现并提醒敏感信息
依赖安全审计 (Dependency Audit)
- 全面扫描: 扫描
package.json、Cargo.toml等依赖配置文件 - 漏洞数据库: 内置最新的漏洞数据库,及时识别已知安全风险
- 依赖链分析: 分析完整的依赖链,识别间接依赖中的安全问题
- 版本建议: 提供安全版本的升级建议
危险模式识别 (Dangerous Pattern Detection)
- 多语言支持: 支持 JavaScript/TypeScript、Rust、CSS 等多种语言的危险模式识别
- 常见危险操作: 识别
eval()、new Function()、dangerouslySetInnerHTML等危险操作 - 安全最佳实践: 检查代码是否遵循安全最佳实践
- 框架特定规则: 针对 React、Vue 等框架的特定安全规则
结构化输出与集成
- 统一格式: 所有发现的安全问题均以统一的
AuditIssue格式输出 - CI/CD 集成: 易于集成到 CI/CD 流水线中,支持失败阈值设置
- 详细报告: 生成详细的安全审计报告,包括问题描述、严重程度和修复建议
- 可配置性: 支持通过配置文件自定义审计规则和阈值
🏗️ 核心数据结构
AuditIssue
审计问题的核心载体,包含以下信息:
- 文件路径: 问题所在的文件路径
- 行号: 问题所在的行号
- 严重等级 (Severity): 问题的严重程度(Critical、High、Medium、Low)
- 分类信息: 问题所属的类别(Secret、Dependency、DangerousPattern)
- 描述: 问题的详细描述
- 修复建议: 针对问题的修复建议
AuditCategory
定义了审计的三大领域:
- Secret: 敏感信息,如 API 密钥、密码等
- Dependency: 依赖项安全问题
- DangerousPattern: 不安全的代码编写模式
NargoAudit
审计引擎主体,集成了以下能力:
- 文件系统遍历: 递归扫描项目文件
- 正则匹配逻辑: 识别敏感信息和危险模式
- 特定文件解析: 解析 package.json、Cargo.toml 等配置文件
- 结果聚合: 汇总和分析审计结果
🚀 使用方法
命令行使用
# 运行安全审计
# 生成详细报告
# 忽略特定漏洞
# 只扫描特定目录
# 设置失败阈值
集成到 CI/CD
# GitHub Actions 示例
name: Security Audit
on:
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run Nargo Audit
run: nargo audit --fail-on high
配置文件
nargo-audit 支持通过 nargo.config.toml 文件进行配置:
[]
# 启用/禁用特定审计类别
= true
= ["secret", "dependency", "dangerous-pattern"]
# 严重程度阈值
= "high"
# 忽略的漏洞
= ["CVE-2023-1234", "CVE-2023-5678"]
# 自定义敏感信息规则
[]
= [
{ = "Custom API Key", = "api_key_[0-9a-f]{32}", = "high" }
]
# 依赖审计配置
[]
= "https://registry.npmjs.org"
= "24h"
# 危险模式配置
[]
= true
= true
📊 与其他安全审计工具对比
| 特性 | nargo-audit | npm audit | cargo audit | eslint-plugin-security |
|---|---|---|---|---|
| 多语言支持 | ✅ (TypeScript, Rust, CSS) | ❌ (仅 JavaScript) | ❌ (仅 Rust) | ❌ (仅 JavaScript) |
| 敏感信息扫描 | ✅ (完整) | ❌ (不支持) | ❌ (不支持) | ❌ (有限支持) |
| 依赖审计 | ✅ (多包管理器) | ✅ (仅 npm) | ✅ (仅 Cargo) | ❌ (不支持) |
| 危险模式识别 | ✅ (多语言) | ❌ (不支持) | ❌ (不支持) | ✅ (仅 JavaScript) |
| 自定义规则 | ✅ (完整) | ❌ (有限) | ❌ (有限) | ✅ (完整) |
| CI/CD 集成 | ✅ (完整) | ✅ (完整) | ✅ (完整) | ✅ (完整) |
| 性能 | ⚡⚡⚡ (快速) | ⚡ (一般) | ⚡⚡ (快速) | ⚡ (一般) |
🎯 应用场景
开发阶段安全检查
在开发过程中,nargo-audit 可以实时扫描代码,及时发现并提醒开发者潜在的安全问题,确保安全意识贯穿整个开发流程。
CI/CD 流水线集成
在 CI/CD 流水线中集成 nargo-audit,可以在代码合并和部署前进行安全检查,防止安全问题进入生产环境。
项目安全评估
对于现有项目,nargo-audit 可以进行全面的安全评估,识别潜在的安全风险,并提供详细的修复建议。
安全合规检查
对于需要符合特定安全标准的项目,nargo-audit 可以帮助检查是否符合相关安全要求,生成合规报告。
🔧 核心 API
基本用法
use NargoAudit;
use AuditOptions;
// 创建审计引擎
let audit = new;
// 配置审计选项
let options = AuditOptions ;
// 运行审计
let results = audit.run;
// 处理审计结果
for issue in results.issues
🔗 相关项目
- nargo-linter: 提供底层的静态分析与规则校验能力
- nargo-types: 定义了审计结果中使用的通用上下文与类型系统
- nargo-compiler: Nargo 的核心编译引擎
- nargo-tools: Nargo 的命令行工具集合
📚 文档
🤝 贡献
我们欢迎所有形式的贡献!请查看 贡献指南 了解如何开始。
⚖️ License
MIT.
📞 联系我们
如有任何问题或建议,欢迎通过以下方式联系我们:
- Email: team@nargo.dev
- GitHub: nargo-js/nargo