JS-X-Ray 是一款 JavaScript 和 TypeScript 的 SAST 工具,用于识别恶意模式、安全漏洞和代码异常。你可以把它看作 ESLint,但专注于安全分析。JS-X-Ray 最初是为 NodeSecure CLI 创建的,如今已发展成为一个独立且可靠的供应链保护方案。
JS-X-Ray 将 JS 或 TS 代码解析为 抽象语法树(AST),无需大量使用 RegEx 或 Semgrep 规则。这使其能够进行变量追踪、动态导入解析以及检测模式匹配工具无法发现的高级混淆。代价是 JS-X-Ray 完全专注于 JavaScript/TypeScript 生态系统。
require()、import 和动态导入,支持完整的变量追溯process.env 序列化、不安全的 Shell 命令eval()、Function() 构造函数、易受 ReDoS 攻击的正则表达式、SQL 注入以下包可在 Node 包仓库中找到,并可通过 npm 或 yarn 轻松安装。
$ npm i @nodesecure/js-x-ray
# 或
$ yarn add @nodesecure/js-x-ray
import { AstAnalyser } from "@nodesecure/js-x-ray";
const scanner = new AstAnalyser();
const { warnings, dependencies } = await scanner.analyseFile("./file.js");
console.log(dependencies);
console.dir(warnings, { depth: null });
完整的 API 文档、警告分类及高级用法,请参阅 @nodesecure/js-x-ray 包自述文件。
如果你是 希望为项目做贡献 的开发者,请首先阅读 贡献指南。
完成开发后,运行以下脚本以确认测试(及 linter)仍然正常:
$ npm run check
[!CAUTION] 如果你引入了新功能或修复了 Bug,请务必同时为其编写测试。
对于从事 JS-X-Ray 内部开发的贡献者,以下资源记录了底层工具和 AST 操作模式:
JS-X-Ray 的性能通过 mitata 进行测量和跟踪。
运行基准测试:
workspaces/js-x-ray 目录。npm run bench。基准测试结果存储在 workspaces/js-x-ray/benchmark/report.json 中。请勿手动编辑此文件;它会在每次拉取请求时自动更新。
感谢以下这些出色的人们(表情键):
MIT
![]() tchapacan 💻 ⚠️ |
![]() mkarkkainen 💻 |
![]() Michael Mior 📖 |