mizinga45/staticJSscanner
GitHub: mizinga45/staticJSscanner
一个基于Web的静态分析工具,用于检测JavaScript源代码中的安全漏洞。
Stars: 0 | Forks: 0
# SecScan JS
**一个针对JavaScript源代码的静态安全漏洞扫描器**
SecScan JS是一个基于Web的静态分析工具,它可以在不执行代码的情况下检测JavaScript源代码中的安全漏洞。它使用基于AST的污点分析技术,跟踪用户控制的数据从输入源到危险汇聚点的流动,并将每个发现映射到其CWE标识符,附带严重性分类和可操作的修复指导。
## 目录
## 功能
- **13种漏洞类型** — 全面对齐OWASP标准的JavaScript安全弱点覆盖
- **基于AST的污点分析** — 跟踪用户控制的数据流从源到危险汇聚点
- **识别清理器** — 识别DOMPurify、path.basename、escapeHtml等清除污点的函数
- **过程间分析** — 跟踪跨函数调用的污染数据
- **CWE映射** — 每个漏洞映射到其CWE ID,包含严重性和修复建议
- **多种输入方式** — 上传文件、扫描URL(获取链接的JS)或浏览文件夹
- **JS提取** — 自动从HTML和PHP文件中提取JavaScript
- **反混淆** — 逆转5种常见混淆算法(十六进制、base64、字符编码、unicode、基于数组的)
- **压缩处理** — 分析前自动美化压缩代码
- **报告导出** — 下载JSON、HTML或PDF格式的报告
- **管理员与开发者角色** — 独立面板,提供不同的报告视图
- **邀请码系统** — 开发者分享8字符代码,授权管理员访问其报告
- **测试报告** — 显示测试了哪些模式、检测到了哪些以及通过了哪些
- **后台扫描** — 异步扫描,带进度条和声音通知
- **红色语法高亮** — 危险代码模式以红色高亮显示
- **扫描历史** — 保存完整结果,可随时查看
- **减少误报** — 跳过库文件,检测清理器,进行深度上下文感知分析
- **严重性分类** — 危急、高危、中危评级,用于优先级排序
## 检测的漏洞类型
| # | 漏洞类型 | CWE ID | 严重性 | 检测内容 |
|---|---|---|---|---|
| 1 | SQL注入 | CWE-89 | 危急 | SQL查询中的字符串拼接或模板字面量 |
| 2 | 命令注入 | CWE-78 | 危急 | 用户输入传递给exec(), spawn(), system() |
| 3 | 路径遍历 | CWE-22 | 危急 | fs.readFile(), writeFile()操作中的用户输入 |
| 4 | 不安全的反序列化 | CWE-502 | 危急 | 用户输入传递给unserialize/deserialize |
| 5 | 跨站脚本 (XSS) | CWE-79 | 高危 | innerHTML, document.write()中的用户输入 |
| 6 | 不安全的eval() | CWE-95 | 高危 | 动态/用户输入传递给eval() |
| 7 | 原型污染 | CWE-1321 | 高危 | 对象属性赋值中的用户控制键名 |
| 8 | SSRF | CWE-918 | 高危 | fetch/axios/request中的用户控制URL |
| 9 | Angular安全绕过 | CWE-79 | 高危 | bypassSecurityTrust*与用户输入结合 |
| 10 | 硬编码密钥 | CWE-798 | 中危 | 源代码中的API密钥、密码、令牌 |
| 11 | 开放重定向 | CWE-601 | 中危 | redirect/location.href中的用户输入 |
| 12 | ReDoS | CWE-1333 | 中危 | 嵌套量词的正则表达式(灾难性回溯) |
| 13 | 不安全的随机数 | CWE-330 | 中危 | Math.random()赋值给安全敏感变量 |
## 使用技术
### 前端
| 技术 | 用途 |
|---|---|
| HTML5 | 页面结构与语义标记 |
| CSS3(自定义) | 深色网络安全主题、动画、响应式设计 |
| JavaScript(原生) | 打字动画、拖放、进度条、通知 |
| Jinja2 | 服务器端模板引擎 |
| Google Fonts | Inter(界面)+ JetBrains Mono(代码) |
### 后端
| 技术 | 用途 |
|---|---|
| Python 3.10+ | 核心编程语言 |
| Flask 3.x | Web框架 |
| Flask-Login | 用户认证与会话管理 |
| Flask-Bcrypt | 密码哈希 |
| Flask-SQLAlchemy | 数据库ORM |
| Flask-WTF / WTForms | 表单处理与验证 |
| SQLite | 数据库(用户、扫描结果) |
| WeasyPrint | PDF报告生成 |
### 扫描引擎
| 技术 | 用途 |
|---|---|
| Acorn(Node.js) | JavaScript AST解析器(ECMAScript 2022) |
| 自定义规则引擎 | 污点分析与漏洞检测 |
| BeautifulSoup4 | HTML/PHP解析以进行JS提取 |
| Requests | 用于URL扫描的HTTP请求 |
| JSBeautifier | 压缩代码的反混淆 |
### 开发与测试
| 技术 | 用途 |
|---|---|
| Git & GitHub | 版本控制 |
| pytest | 测试框架 |
| Node.js / npm | Acorn解析器运行时 |
## 架构
```
┌─────────────────────────────────────────────────────────────┐
│ Web Interface (Flask) │
│ Landing → Login/Register → Dashboard → Scan → Results │
├─────────────────────────────────────────────────────────────┤
│ │
│ Input Handler ──→ Code Extractor ──→ Parser (Acorn AST) │
│ (file/URL/folder) (HTML/PHP strip) (Node.js subprocess) │
│ │ │
│ ▼ │
│ Report Generator ←── CWE Mapper ←── Core Analysis Engine │
│ (JSON/HTML/PDF) (CWE IDs) ├─ SQL Injection │
│ ├─ XSS │
│ ├─ Command Injection │
│ ├─ Path Traversal │
│ ├─ Prototype Pollution│
│ ├─ eval() Injection │
│ ├─ Hardcoded Secrets │
│ ├─ Open Redirect │
│ ├─ ReDoS │
│ ├─ Insecure Random │
│ └─ Angular Bypass │
└─────────────────────────────────────────────────────────────┘
```
**工作原理:**
1. 用户提供输入(文件上传、URL或文件夹路径)
2. **输入处理器**读取文件或获取URL内容
3. **代码提取器**从HTML/PHP中隔离JavaScript(去除`