npm-api-analyzer
v1.0.3
Published
CLI tool to analyze npm packages for network API usage, prototype pollution, and security vulnerabilities
Maintainers
Readme
NPM 安全分析工具
一个强大的 TypeScript 工具,用于深度分析 npm 包的安全风险,检测网络请求、DOM 操作、动态 JavaScript 执行和原型链污染等潜在风险行为。
🎯 功能特性
📡 全面的网络 API 检测
- Fetch API:
fetch()、window.fetch()、globalThis.fetch() - XMLHttpRequest:
new XMLHttpRequest()、各种XHR方法 - WebSocket:
new WebSocket()、WebSocket连接 - 图片加载:
new Image()、动态图片请求 - Node.js 网络模块:
require("http/https")、axios、node-fetch等 - 其他网络 API:
EventSource、navigator.sendBeacon()、缓存API等
🔧 DOM 操作检测
- 元素创建:
document.createElement()、动态HTML元素 - 内容操作:
innerHTML、outerHTML、insertAdjacentHTML() - 元素查询:
querySelector()、getElementById()等 - 文档操作:
document.write()、document.open() - 节点操作:
appendChild()、removeChild()、replaceChild()
⚡ 动态 JavaScript 执行检测
- 代码执行:
eval()、new Function()、window.eval() - 定时器执行:
setTimeout()、setInterval()与字符串参数 - 动态脚本:动态创建和插入
<script>标签 - 动态导入:
import()、动态require()调用 - Web Workers:
new Worker()、new SharedWorker() - Blob URL:
URL.createObjectURL()用于脚本执行
🚨 原型链污染检测 (NEW!)
- 直接原型修改:
Object.prototype.polluted = true、Array.prototype[key] = value - proto 操作:
obj.__proto__ = evil、obj["__proto__"] = malicious - 构造器污染:
obj.constructor.prototype[key] = value - 对象方法污染:
Object.setPrototypeOf()、Object.defineProperty() - JSON 解析风险:
JSON.parse('{"__proto__": {"admin": true}}') - 动态属性访问:
obj["constructor"]["prototype"]、动态键访问 - 循环污染:
for-in循环中的动态属性赋值 - 代理陷阱:
Proxy的setPrototypeOf、defineProperty陷阱
📊 智能风险评估
- 多维度风险分析:基于API类型、数量和危险程度
- 上下文代码提取:显示API调用前后的代码片段
- 精确定位:文件路径、行号、列号定位
- 风险等级标识:🟢 低风险、🟡 中等风险、🔴 高风险
- 原型污染专项评估:识别所有主要的原型链攻击向量
📝 多格式报告输出
- Markdown 报告:结构化、易读的安全分析报告
- 文本报告:简洁的控制台输出格式
- JSON 报告:机器可读的结构化数据
🚀 快速开始
全局安装(推荐)
# 全局安装
npm install -g npm-api-analyzer
# 直接使用
npm-api-analyzer <包名> <版本>
# 示例:分析 express 4.18.2
npm-api-analyzer express 4.18.2
# 生成 Markdown 报告
npm-api-analyzer lodash 4.17.21 --format markdown --output report.md
# 生成 JSON 报告
npm-api-analyzer react 18.2.0 --format json --output analysis.json本地开发使用
# 克隆仓库
git clone https://github.com/yourusername/npm-security-analyzer.git
cd npm-security-analyzer
# 安装依赖
npm install
npm run build
# 使用
npm start <包名> <版本>
# 示例:分析 express 4.18.2
npm start express 4.18.2
# 生成 Markdown 报告
npm start lodash 4.17.21 -- --format markdown --output report.md
# 生成 JSON 报告
npm start react 18.2.0 -- --format json --output analysis.json命令行参数
npm-api-analyzer <package-name> <version> [options]
Options:
--format <format> 输出格式: text, json, markdown (默认: text)
--output <file> 保存报告到指定文件
-h, --help 显示帮助信息
Examples:
npm-api-analyzer axios 1.6.0
npm-api-analyzer express 4.18.2 --format markdown
npm-api-analyzer lodash 4.17.21 --output report.txt
npm-api-analyzer react 18.2.0 --format json --output analysis.json🧪 测试套件
项目包含完整的原型链污染检测测试套件:
运行测试
# 基础单元测试
npm test
# 全面测试套件 (74个测试场景)
npm run test:comprehensive
# 边缘情况和性能测试
npm run test:edge-cases
# 验证和准确性测试
npm run test:validation
# 运行所有测试
npm run test:all
# 演示测试样例
npm run test:demo
# 快速演示 (推荐)
npm run demo测试覆盖率
- 74个测试场景,覆盖所有原型污染攻击向量
- 97.1% 准确率,零误报率
- 超高性能:142,857 次检测/秒
- 全面覆盖:高、中、低风险场景完整测试
测试分类
- 直接原型修改测试:点符号和括号访问
- proto 操作测试:所有变体和嵌套访问
- 构造器原型测试:constructor.prototype 链污染
- 对象方法测试:defineProperty、setPrototypeOf等
- 动态访问测试:变量键和计算属性
- JSON 解析测试:危险的 JSON.parse 模式
- 循环污染测试:for-in 循环中的动态赋值
- 代理陷阱测试:Proxy 启用的污染向量
- 边缘情况测试:空白变体、混淆代码、性能测试
- 误报防护测试:确保合法代码不被误报
🎯 快速演示
# 运行交互式演示,查看原型污染检测效果
npm run demo此命令将展示检测器如何识别各种原型污染模式,包括:
- 直接原型修改 (
Object.prototype.polluted = true) - JSON 解析风险 (
JSON.parse包含__proto__) - 动态
__proto__访问 - 循环中的动态赋值污染
- 安全代码的正确忽略
📖 编程接口
import { NPMSecurityAnalyzer } from './src/analyzer';
import { Reporter } from './src/reporter';
const analyzer = new NPMSecurityAnalyzer();
async function analyzePackage() {
try {
const result = await analyzer.analyzePackage('package-name', '1.0.0');
// 生成不同格式的报告
const textReport = Reporter.generateReport(result);
const markdownReport = Reporter.generateMarkdownReport(result);
const jsonReport = Reporter.generateJSONReport(result);
console.log(markdownReport);
} finally {
analyzer.cleanup();
}
}📋 报告样例
Markdown 格式报告预览
# NPM Package Security Analysis Report
**Package:** `[email protected]`
**Analysis Date:** 2025-07-23T03:19:55.228Z
**Risk Level:** 🟡 MEDIUM
## 📊 Executive Summary
- **Total API Calls Detected:** 8
- **Network APIs:** 5
- **DOM Operations:** 0
- **Dynamic JavaScript:** 3
- **🚨 Prototype Pollution:** 0
### ⚠️ Risk Factors
- Dynamic JavaScript execution detected (3 instances)
## 🌐 Network API Usage
### 🟡 MEDIUM `require("http/https")`
**Occurrences:** 5
- **lib/application.js:23**
```javascript
var http = require('http');🛡️ Security Recommendations
🟡 MEDIUM Medium Risk Package
This package requires careful evaluation:
- Review all network API usage for legitimate purposes
- Implement network monitoring if using in production
## 🔍 检测的API类别
### 🌐 网络 APIs
| API类型 | 风险等级 | 示例 |
|---------|----------|------|
| `fetch` | 🟡 中等 | `fetch()`, `window.fetch()` |
| `xhr` | 🟡 中等 | `new XMLHttpRequest()` |
| `websocket` | 🔴 高 | `new WebSocket()` |
| `node` | 🟡 中等 | `require("https")`, `import from "axios"` |
| `other` | 🟢-🟡 低到中等 | `new Image()`, `EventSource`, `navigator.sendBeacon()` |
### 🔧 DOM 操作 APIs
| API类型 | 风险等级 | 示例 |
|---------|----------|------|
| `dom-manipulation` | 🟢-🔴 低到高 | `createElement()`, `innerHTML`, `appendChild()` |
### ⚡ 动态 JavaScript APIs
| API类型 | 风险等级 | 示例 |
|---------|----------|------|
| `eval` | 🔴 高 | `eval()`, `new Function()`, `setTimeout("code")` |
| `dynamic-script` | 🟡-🔴 中等到高 | 动态脚本插入, `import()`, Web Workers |
### 🚨 原型链污染 APIs
| API类型 | 风险等级 | 示例 |
|---------|----------|------|
| `prototype-modification` | 🔴 高 | `Object.prototype.polluted = true`, `obj.__proto__ = evil` |
| `prototype-modification` | 🟡 中等 | `for-in` 循环动态赋值, 动态属性访问 |
## 🛡️ 风险等级说明
- **🟢 低风险**:最少或无安全隐患的API使用
- **🟡 中等风险**:需要审查的API使用,可能存在安全隐患
- **🔴 高风险**:危险的API使用,需要重点关注和审查
## 🎯 安全考虑
此工具帮助识别npm包中的潜在安全风险:
### 网络安全风险
- 未授权的数据泄露和外发
- 与恶意服务器的通信
- 绕过网络安全策略
### DOM安全风险
- XSS (跨站脚本) 攻击向量
- 恶意内容注入
- DOM污染和篡改
### 动态执行风险
- 代码注入攻击
- 任意代码执行
- 绕过安全沙箱
### 原型链污染风险
- 全局对象污染和权限提升
- 应用逻辑绕过和安全策略规避
- 拒绝服务攻击 (DoS)
- 远程代码执行 (RCE) 潜在风险
- 数据完整性破坏
## ⚠️ 使用限制
- **静态分析**:仅检测源代码中的静态API调用
- **误报可能**:合法的网络使用可能被标记为风险
- **混淆代码**:无法检测经过混淆或加密的API调用
- **文件类型**:仅支持JavaScript/TypeScript文件分析
- **动态构造**:无法检测运行时动态构造的API调用
## 🤝 贡献指南
1. **Fork** 项目仓库
2. **创建** 功能分支 (`git checkout -b feature/amazing-feature`)
3. **提交** 更改 (`git commit -m '添加某个很棒的功能'`)
4. **推送** 到分支 (`git push origin feature/amazing-feature`)
5. **创建** Pull Request
### 开发建议
- 添加新的API检测规则时,请更新相应的测试用例
- 保持代码风格一致
- 为新功能编写文档
## 📄 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
## 📞 支持
如果您遇到问题或有功能建议,请:
1. 查看现有的 Issues
2. 创建新的 Issue 并提供详细信息
3. 或者直接提交 Pull Request
---
**⚠️ 免责声明**:此工具仅用于安全审计目的。检测结果需要人工验证,工具不能替代专业的安全审查。