
js-x-ray @nodesecure/[email protected]
Открытый SAST-сканер для JavaScript и Node.js. Статический анализатор для обнаружения наиболее распространённых вредоносных шаблонов 🔬.
JS-X-Ray — это SAST для JavaScript и TypeScript, предназначенный для выявления вредоносных паттернов, уязвимостей безопасности и аномалий в коде. Это как ESLint, но посвящённый анализу безопасности. Изначально созданный для NodeSecure CLI, JS-X-Ray стал независимым и серьёзным инструментом для защиты цепочки поставок.
🔎 Как это работает
JS-X-Ray разбирает код JS или TS в абстрактное синтаксическое дерево (AST) без активного использования RegEx или правил Semgrep. Это позволяет отслеживать переменные, разрешать динамические импорты и обнаруживать сложную обфускацию, которую пропускают инструменты сопоставления с шаблонами. Обратная сторона — JS-X-Ray полностью посвящён экосистеме JavaScript/TypeScript.
💡 Возможности
- Отслеживание
require(),importи динамических импортов с полной трассировкой переменных - Обнаружение обфусцированного кода и определение использованного инструмента (jsfuck, jjencode, obfuscator.io и другие)
- Выявление вредоносных паттернов: эксфильтрация данных, сериализация
process.env, небезопасные команды оболочки - Обнаружение уязвимого кода:
eval(), конструкторFunction(), регулярные выражения, подверженные ReDoS, SQL-инъекции - Выявление слабых криптографических алгоритмов (MD5, SHA1 и т. д.)
- Извлечение индикаторов инфраструктуры: URL-адреса, IP-адреса, имена хостов, адреса электронной почты
- Настраиваемые режимы чувствительности (консервативный/агрессивный) и расширяемая система проб
- Поддержка как JavaScript, так и TypeScript
💃 Начало работы
Эти пакеты доступны в репозитории пакетов 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, каталог предупреждений и информацию о расширенном использовании см. в README пакета @nodesecure/js-x-ray.
Рабочие пространства
🐥 Руководство для контрибьюторов
Если вы разработчик и хотите внести вклад в проект, сначала прочитайте руководство CONTRIBUTING.
После завершения разработки убедитесь, что тесты (и линтер) по-прежнему в порядке, запустив следующий скрипт:
$ npm run check
[!CAUTION] Если вы добавляете новую функцию или исправляете ошибку, обязательно включите для неё тесты.
Внутренние API
Для контрибьюторов, работающих с внутренним устройством JS-X-Ray, следующие ресурсы описывают низкоуровневые утилиты и паттерны манипуляции с AST:
- Утилиты ESTree — низкоуровневые помощники для манипуляции узлами AST ESTree
- Паттерны присваивания и объявления ESTree (на французском) — справочное руководство по паттернам присваивания и объявления JavaScript в форме AST
Бенчмарки
Производительность js-x-ray измеряется и отслеживается с помощью mitata.
Чтобы запустить бенчмарки:
- Перейдите в
workspaces/js-x-ray. - Запустите
npm run bench.
Результаты бенчмарков сохраняются в workspaces/js-x-ray/benchmark/report.json. Не редактируйте этот файл вручную; он автоматически обновляется при каждом pull request.
Контрибьюторы ✨
Спасибо этим замечательным людям (ключ эмодзи):
Лицензия
MIT

























