
ثبّت حزم NPM بأمان
مثبّت npm يركز على الأمان لحماية مشاريعك من الحزم المخترقة حديثًا.
هجمات سلسلة التوريد على حزم npm تشكّل تهديدًا متناميًا. أحيانًا يخترق المهاجمون حزمًا شرعية عن طريق:
غالبًا ما تحدث هذه الهجمات فجأة — الحزمة التي كانت آمنة بالأمس قد تكون مخترقة اليوم. safe-npm يحميك عبر تثبيت إصدارات الحزم المتاحة للعموم فقط لفترة زمنية دنيا (90 يومًا افتراضيًا). وهذا يمنح مجتمع الأمان وقتًا لاكتشاف الإصدارات الخبيثة والإبلاغ عنها قبل وصولها إلى مشروعك.
عند تشغيل safe-npm install، يقوم بـ:
package.json أو من وسائط سطر الأوامرعلى سبيل المثال، إذا حددت react@^18 وتم نشر إصدار خبيث [email protected] بالأمس، فسيقوم safe-npm بتثبيت أحدث إصدار يبلغ عمره 90 يومًا على الأقل بدلًا من ذلك.
# Install globally
npm install -g @dendronhq/safe-npm
# Now you can use it anywhere
safe-npm install
# Clone and build
git clone <repository-url>
cd safe-npm
npm install
npm run build
# Link the binary globally
npm link
# Use the minimum age of 90 days (default)
safe-npm install
# Or specify your own minimum age
safe-npm install --min-age-days 120
# Install packages directly with version constraints
safe-npm install react@^18 lodash@^4.17.0
# These will be filtered to only use versions at least 90 days old
safe-npm install express --min-age-days 60
# Preview which versions would be installed without actually installing
safe-npm install --dry-run
--min-age-days <n>الافتراضي: 90
الحد الأدنى لعدد الأيام التي يجب أن يكون إصدار الحزمة قد نُشر قبلها حتى يمكن تثبيته.
مثال: --min-age-days 120 يتطلب أن تكون الحزم عمرها 4 أشهر على الأقل.
متى تعدّل القيمة:
--ignore <pkg1,pkg2>قائمة مفصولة بفواصل من الحزم التي تتجاوز شرط العمر. ستظل هذه الحزم تحترم نطاقات semver لكنها تتجاهل الحد الأدنى للعمر.
مثال: --ignore typescript,@types/node
متى تستخدمه:
--strictالخروج بخطأ إذا تعذّر حل أي تبعية إلى إصدار يلبي شرط العمر.
مثال: safe-npm install --strict
متى تستخدمه:
--dev / --prod-onlyالتحكم في أي التبعيات من package.json تتم معالجتها.
أمثلة:
safe-npm install --dev - تثبيت devDependencies فقطsafe-npm install --prod-only - تثبيت تبعيات الإنتاج فقطمتى تستخدمه:
--strategy <direct|overrides>الافتراضي: direct
كيفية تثبيت safe-npm للإصدارات المُحلَّلة:
direct - تثبيت الإصدارات المُحلَّلة مباشرة باستخدام npm install package@version
overrides - كتابة الإصدارات المُحلَّلة إلى حقل overrides في package.json، ثم تشغيل npm install
--registry <url>الافتراضي: https://registry.npmjs.org
تحديد سجل npm بديل.
مثال: --registry https://registry.company.com
متى تستخدمه:
--dry-runعرض ما سيتم تثبيته دون إجراء أي تغييرات.
مثال: safe-npm install --dry-run
متى تستخدمه:
# Create a new project
mkdir my-project && cd my-project
npm init -y
# Install dependencies safely
safe-npm install express@^4 lodash
# This creates package-lock.json with versions at least 90 days old
# Check what versions would be installed with age requirements
safe-npm install --dry-run
# If you're happy, install them
safe-npm install
# In your CI pipeline, fail the build if any package can't meet age requirements
safe-npm install --strict --min-age-days 120
# Or allow newer packages for dev dependencies only
safe-npm install --prod-only --strict
# Need to urgently update a specific package? Add it to ignore list
safe-npm install --ignore package-with-critical-fix
يتضمن المشروع مجموعة اختبارات يمكنك تشغيلها:
npm test
للاختبار الآلي، يمكنك محاكاة استجابات السجل باستخدام ملفات fixtures:
export SAFE_NPM_FIXTURES=/path/to/fixtures.json
safe-npm install
يجب أن يحتوي ملف fixtures على JSON يحاكي استجابات سجل npm لكل حزمة.
سيناريو واقعي:
popular-lib يشرف عليها مطوّر موثوق[email protected] مصحوبًا ببرمجية خبيثة^5.0.0 ستثبّت الإصدار الخبيث فورًا4.9.0 (أحدث إصدار من 90+ يومًا)الأمان يقوم على المفاضلات. safe-npm يقايض التحديثات الحديثة جدًا بالحماية من الاختراقات المفاجئة لسلسلة التوريد. إنه طبقة واحدة في استراتيجية دفاع متعدد الطبقات يجب أن تشمل أيضًا:
npm audit)ISC