
ماسح SAST مفتوح المصدر لجافاسكريبت و 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 والاستيرادات الديناميكية مع تتبع كامل للمتغيراتprocess.env، أوامر شل غير آمنةeval()، منشئ Function()، التعابير العادية المعرضة لـ ReDoS، حقن SQLهذه الحزم متاحة في مستودع Node Package ويمكن تثبيتها بسهولة باستخدام 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 });
لتوثيق واجهة برمجة التطبيقات الكامل، كتالوج التحذيرات، والاستخدام المتقدم، راجع README حزمة @nodesecure/js-x-ray.
إذا كنت مطورًا تتطلع إلى المساهمة في المشروع، فيجب عليك أولاً قراءة دليل المساهمة.
بمجرد الانتهاء من تطويرك، تحقق من أن الاختبارات (و linter) لا تزال جيدة عن طريق تشغيل النص التالي:
$ npm run check
[!CAUTION] في حالة تقديم ميزة جديدة أو إصلاح خطأ، تأكد من تضمين اختبارات لها أيضًا.
للمساهمين الذين يعملون على دواخل 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 📖 |