چطور قبل از نصب یه پکیج npm بررسیش کنیم
خلاصهٔ کاملتر
ایدهی اصلی مقاله ساده ولی مهمه: هر بار که npm install میزنی، داری کدی رو وارد محیط production میکنی که یه غریبه نوشته و به هر چیزی که پروسهت دسترسی داره میرسه — فایلسیستم، شبکه، متغیرهای محیطی. ولی بیشتر ما این ریسک رو فقط با نگاه به دو عدد مدیریت میکنیم: دانلود هفتگی و ستارهی گیتهاب. نویسنده میگه هیچکدوم اینها چیز معناداری دربارهی امن یا سالم بودن پکیج بهت نمیگن.
حملات زنجیرهی تأمین (supply chain) این موضوع رو جدیتر کرده. نمونههایی مثل event-stream و ua-parser-js نشون دادن یه پکیج محبوب و قانونی میتونه از طریق مهندسی اجتماعی روی نگهدارنده، تایپواسکوات یا یه وابستگی چندلایه آلوده بشه. یه تهدید تازهتر هم هست به اسم slopsquatting: مدلهای هوش مصنوعی گاهی اسم پکیجهایی رو پیشنهاد میدن که وجود ندارن، و مهاجمها اون اسمها رو ثبت میکنن تا هر کی کورکورانه نصب کرد، یه چیز مخرب گیرش بیاد.
اولین و مهمترین سؤال اینه: اصلاً به این وابستگی نیاز داری؟ نویسنده یه «تست حذف» پیشنهاد میده — اگه فردا این پکیج ناپدید بشه چقدر سخته جایگزینش کنی؟ برای یه ابزار خیلی کوچیک، اغلب بهتره همون چند خط رو خودت بنویسی تا یه وابستگی جدید با ریسک بلندمدت اضافه کنی. تعداد وابستگیهای خود پکیج هم مهمه؛ وابستگی کمتر یعنی سطح حملهی کوچیکتر.
دومین سیگنال کلیدی نگهداری فعاله. فقط به آخرین کامیت نگاه نکن، چون ممکنه یه تغییر بیاهمیت توی CI باشه. ببین آخرین باری که یه آدم واقعی روی خود کد تغییر معنادار داده کِی بوده، قدیمیترین ایشوهای باز جواب گرفتن یا نه، و آیا کل پروژه روی دوش یه نفره (همون «bus factor»). کیفیت CHANGELOG هم نشونهی خوبیه از اینکه نویسنده چقدر به کاربرهاش اهمیت میده.
مهمترین سیگنال امنیتی provenance (تأیید منشأ) هست. وقتی یه پکیج با provenance منتشر میشه، رجیستری npm یه گواهی رمزنگاریشده (امضاشده توسط زیرساخت OIDC گیتهاب) میگیره که اون فایل خاص پکیج رو به یه کامیت خاص توی یه ریپازیتوری خاص گره میزنه. توی صفحهی npm یه نشان سبز «Provenance» نشونش میده و با دستور npm audit signatures هم میشه از خط فرمان بررسیش کرد. نبودنش لزوماً مشکوک نیست، ولی یعنی نمیتونی زنجیرهی منبع تا انتشار رو تأیید کنی.
یه خطر دیگه که همون لحظهی نصب کد اجرا میکنه، اسکریپتهای نصبه: هوکهای preinstall و postinstall توی package.json. بیشتر پکیجهای سالم بهشون نیاز ندارن (بهجز مواردی مثل کامپایل افزونههای native)، پس دیدن یه اسکریپت نصب بدون دلیل روشن جای سؤال داره. نویسنده در آخر تأکید میکنه این یه آزمون قبول/رد نیست، بلکه یه ارزیابی ریسکه که به زمینه بستگی داره — یه ابزار فرمت تاریخ ریسکش با یه کلاینت HTTP بین سرویس تو و یه API دولتی فرق داره.
نکات کلیدی:
- دانلود و ستاره معیار امنیت نیستن؛ انتخاب پکیج بیشتر از یه نگاه پنجثانیهای میارزه
- اول بپرس اصلاً به این وابستگی نیاز داری یا میشه چند خط خودت بنویسی
- نگهداری فعال، bus factor و کیفیت CHANGELOG رو بررسی کن
- مهمترین سیگنال امنیتی provenanceـه؛ با npm audit signatures چکش کن
- مراقب اسکریپتهای نصب بیدلیل (preinstall/postinstall) باش که همون لحظه کد اجرا میکنن




