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
# or
$ 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 包 README。
如果你是希望为本项目做出贡献的开发者,必须先阅读 CONTRIBUTING 指南。
完成开发后,请运行以下脚本检查测试(以及 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 中。请勿手动编辑此文件;它会在每次 pull request 时自动更新。
感谢这些了不起的人(emoji key):