
يحمي من هجمات سلسلة التوريد، والانزلاق الإملائي، والانتحال الإملائي من التبعيات والكود.
cargo install sloppy-joe
هجوم سلسلة التوريد LiteLLM (مارس 2026) اخترق حزمة تحمل 97 مليون تنزيل شهريًا. سرق المهاجمون بيانات اعتماد النشر، ودفعوا إصدارات خبيثة سرقت مفاتيح SSH وبيانات اعتماد السحابة وأسرار K8s. كانت بوابة عمر الإصدار الافتراضية لمدة 72 ساعة في sloppy-joe لتمنع كلا الإصدارين المسمومين — فقد تم اكتشافهما في غضون ساعات، قبل وقت طويل من فتح البوابة. إذا قمت بتشغيل
sloppy-joe checkفي CI، فإن هذا الهجوم يفشل. التحليل الكامل
المولدات الكودية بالذكاء الاصطناعي تهلوس أسماء الحزم بنسبة ~20% من الوقت. يسجل المهاجمون تلك الأسماء وينتظرون. يكتشف sloppy-joe هذه الحزم في CI قبل تشغيل npm install أو pip install.
cargo install sloppy-joe
sloppy-joe check
sloppy-joe check --full
sloppy-joe check --ci
sloppy-joe check --dir ./my-project
sloppy-joe check --type npm
sloppy-joe check --python-groups dev,test --python-version 3.12 sloppy-joe check --python-extras docs --python-platform linux --python-version 3.12
sloppy-joe check --config /etc/sloppy-joe/config.json
sloppy-joe check --config https://raw.githubusercontent.com/yourorg/security-configs/main/sloppy-joe.json
sloppy-joe check --json
sloppy-joe check --review-exceptions
sloppy-joe init --register
sloppy-joe init --greenfield --ecosystem npm
sloppy-joe init --from-current
sloppy-joe init --from-current --register
sloppy-joe init > /secure/location/sloppy-joe.json
### Nix```bash
nix profile install github:brennhill/sloppy-joe
أوضاع المسح:
sloppy-joe check بتشغيل الحاجز المحلي السريع. يفرض دائمًا تحليل ملفات البيان، ومزامنة ملفات القفل، والإثبات، وسياسة المصادر غير المدعومة. إذا تغيرت حالة التبعية أو السياسة، أو كان آخر مسح كامل ناجح أقدم من 24 ساعة، فإنه يوصي باستخدام sloppy-joe check --full.sloppy-joe check --full بتشغيل المسح الصارم عبر الإنترنت ويقوم بتحديث حالة المسح الكامل الناجح المسجلة.sloppy-joe check --ci بتشغيل نفس التغطية الصارمة مثل --full، مع نية موجهة للتكامل المستمر.sloppy-joe check بتقييم ملف runtime الشخصي افتراضيًا. إذا كانت هناك تبعيات نطاقية، فإنه يحذر ويطلب منك تمرير علامات --python-groups و--python-extras و--python-platform و/أو --python-version الصريحة لتحقيق التكافؤ مع CI/build.sloppy-joe check النصية القابلة للقراءة البشرية دائمًا باستخدام --ci أو --full لأغراض CI والإنتاج.رموز الخروج: 0 = لم يتم العثور على مشكلات مانعة في الوضع المحدد، 1 = تم العثور على مشكلات مانعة، 2 = خطأ وقت التشغيل.
يدعم: JavaScript (npm، pnpm، Yarn، Bun)، Python، Rust، Go، Ruby، PHP، JVM (Gradle/Maven)، و.NET — يتم الكشف عنها تلقائيًا من ملفات البيان.
أدلة الأنظمة البيئية: راجع docs/ecosystems/README.md للحصول على نموذج الثقة الحالي والميزات المدعومة والحدود المغلقة عند الفشل لكل نظام بيئي.
| النظام البيئي | ملف البيان المطلوب | ملف القفل / حالة المشروع الموثوقة |
|---|---|---|
| JavaScript / npm | package.json | package-lock.json أو npm-shrinkwrap.json؛ إصدار npm v1 القديم محظور افتراضيًا |
| JavaScript / pnpm | package.json | pnpm-lock.yaml |
| JavaScript / Yarn | package.json | yarn.lock |
| JavaScript / Bun | package.json | bun.lock |
| Python | pyproject.toml، requirements*.txt، Pipfile، setup.cfg، أو setup.py | مسار Poetry الموثوق يستخدم poetry.lock، مسار uv الموثوق يستخدم uv.lock، يتم الوثوق بأدوات pip-tools ذات القفل الكامل للتجزئة فقط عندما يربط رسم بياني متطلبات ملتزم بقيم --index-url وأي --extra-index-url بالضبط؛ يمكن السماح لمؤشرات Python المرئية في المستودع عبر trusted_indexes.pypi؛ الأوضاع الموثوقة لـ Python تقيم ملف تثبيت واحد محدد في كل مرة (runtime افتراضيًا، مجموعات/إضافات/منصة/بنية/إصدار صريحة عبر CLI)؛ يُسمح بملفات البيان القديمة مع تحذيرات افتراضيًا |
| Rust | Cargo.toml | Cargo.lock |
| Go | go.mod | go.sum مطلوب للتبعيات الخارجية |
| Ruby | Gemfile | Gemfile.lock |
| PHP / Composer | composer.json | composer.lock |
| JVM / Gradle | build.gradle أو build.gradle.kts | gradle.lockfile |
| JVM / Maven | pom.xml | تحذير فقط: لا يوجد مسار لملف قفل موثوق به محلي في المشروع حتى الآن |
| .NET / NuGet | .csproj | packages.lock.json |
مصادر التكوين: مسار ملف محلي، رابط HTTPS، أو متغير البيئة SLOPPY_JOE_CONFIG. لا تتم قراءة التكوين أبدًا من دليل المشروع (راجع CONFIG.md لمعرفة السبب).
الإعداد المبدئي: استخدم وضع التمهيد الذي يتطابق مع المستودع:
sloppy-joe init --greenfield --ecosystem <eco> سياسة بدء خاصة بالنظام البيئي للمشاريع الجديدة. حاليًا، تم تنفيذ الإعدادات المسبقة للـ greenfield لـ npm وpypi وcargo؛ تفشل الأنظمة البيئية الأخرى مع خطأ “غير مدعوم بعد”. أضف --register لكتابتها خارج المستودع وتسجيلها بأمان.sloppy-joe init --from-current المستودع الحالي ويطبع اقتراحات تمهيد للمراجعة فقط. حاليًا، تم تنفيذ --from-current فقط للمستودعات التي يكون كودها من الطرف الأول هو npm و/أو cargo؛ تفشل الأنظمة البيئية الأخرى بشكل مغلق مع خطأ “غير مطبق بعد”. أضف --register لكتابة وتسجيل التكوين المُنشأ.sloppy-joe init بدون وضع قالبًا يدويًا محايدًا.ملف ثنائي واحد. 8 أنظمة بيئية. 16 نوع هجوم. صفر نتائج إيجابية خاطئة في الفحوصات التوليدية. تكوين لا تستطيع عوامل AI العبث به.
تتحقق معظم أدوات أمان التبعيات من شيئين أو اثنين — الوجود، أو مسافة التحرير. يتحقق sloppy-joe من 16 ناقل هجوم في تمريرة واحدة: الحزم المُهلوسة، 10 أنواع من انتحال التشابه (تجانسات الحروف، احتلال النطاق، الأحرف المكررة، ارتباك الفاصل، إعادة ترتيب الكلمات، التبديلات المتجاورة، الأحرف المحذوفة، الأشكال المربكة، متغيرات الحالة، لاحقات الإصدار)، فرض القواعد الأساسية، التحكم في عمر الإصدار، تضخيم سكريبت التثبيت، انفجار التبعيات، تغييرات الصيانة، والثغرات المعروفة عبر OSV.dev.