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(去除`