دو قابلیت جدید npm برای امنیت زنجیره تأمین
خلاصهٔ کاملتر
npm در نسخه 11.15.0 دو بهروزرسانی مهم برای امنیت زنجیره تأمین (supply-chain security) منتشر کرده. این اصطلاح به خطراتی اشاره داره که از طریق پکیجهای وابسته وارد پروژه میشن — مثلاً وقتی یه پکیج مخرب بدون اطلاع مینتینر اصلی منتشر میشه.
انتشار مرحلهای (Staged Publishing) حالا به صورت عمومی در دسترسه. با این قابلیت، به جای اینکه npm publish بلافاصله پکیج رو در دسترس همه بذاره، فایل tarball آپلودشده وارد یه صف میشه و یه مینتینر باید با احراز هویت دو مرحلهای (2FA) اون رو تأیید کنه تا نصبپذیر بشه. این صف هم از طریق npmjs.com و هم از CLI قابل مشاهدهست.
این قابلیت مخصوصاً برای پایپلاینهای CI/CD مفیده. توصیهی npm اینه که Staged Publishing رو با Trusted Publishing (OIDC) ترکیب کنی — یعنی CI فقط مجاز به npm stage publish باشه و دکمه تأیید نهایی دست یه انسان بمونه. برای تغییر رفتار CI کافیه دستور رو عوض کنی:
# قبل
npm publish
# بعد
npm stage publishقابلیت دوم، فلگهای جدید کنترل منابع نصب هستن. از نسخه ۱۱.۱۰.۰ فلگ --allow-git اضافه شده بود تا بشه نصب از Git رو محدود کرد. حالا سه فلگ جدید هم اومدن:
- --allow-file: کنترل نصب از مسیرهای لوکال و tarballهای محلی
- --allow-remote: کنترل نصب از URLهای ریموت مثل https tarballs
- --allow-directory: کنترل نصب از دایرکتوریهای لوکال
هر فلگ مقدار all (پیشفرض فعلی) یا none میگیره و میشه توی .npmrc یا package.json هم تنظیمشون کرد. نکته مهم: در نسخه v12 (ماژور بعدی)، مقدار پیشفرض --allow-git از all به none تغییر میکنه — پس اگه الان میخوای رفتار سختگیرانهتری داشته باشی، میتونی همین الان همهشون رو روی none بذاری.
نکات کلیدی:
- هر دو قابلیت نیاز به npm CLI نسخه 11.15.0 یا بالاتر دارن
- Staged Publishing مینتینر رو مجبور میکنه هر انتشار رو با 2FA تأیید کنه
- فلگهای --allow-* جلوی نصب ناخواسته از منابع غیررجیستری رو میگیرن
- در npm v12، پیشفرض --allow-git به none تغییر میکنه
- برای CI/CD کافیه npm publish رو با npm stage publish عوض کنی




