گیت هاب اجرای خودکار اسکریپتهای نصب npm را در نسخه ۱۲ غیرفعال میکند؛ تغییری مهم برای امنیت زنجیره تأمین

GitHub اعلام کرده است که در نسخه بعدی npm v12، چند تغییر امنیتی مهم بهصورت پیشفرض فعال میشود؛ مهمترین آنها خاموش شدن اجرای خودکار اسکریپتهای نصب در زمان npm install است. طبق اعلام رسمی GitHub، این نسخه برای ژوئیه ۲۰۲۶ برنامهریزی شده و از همین حالا در نسخههای npm 11.16.0 و جدیدتر هشدارهای لازم را نمایش میدهد تا تیمها پیش از ارتقا، آماده شوند.
به زبان ساده، از این پس npm install دیگر بهصورت پیشفرض اسکریپتهای preinstall، install و postinstall وابستگیها را اجرا نمیکند، مگر اینکه آن بستهها صراحتاً در پروژه مجاز شده باشند. GitHub این سطح از اسکریپتهای زمان نصب را «بزرگترین سطح اجرای کد» در اکوسیستم npm توصیف کرده است، چون یک بسته آلوده در زنجیره وابستگی میتواند روی سیستم توسعهدهنده یا runnerهای CI کد دلخواه اجرا کند.

این تغییر فقط به اسکریپتها محدود نیست. در npm v12، حلکردن وابستگیهای Git نیز بهطور پیشفرض محدود میشود و وابستگیهایی که از URLهای راه دور مانند tarballهای HTTPS میآیند هم بدون اجازه صریح بارگذاری نخواهند شد. GitHub میگوید این سیاستها برای بستن مسیرهای رایج اجرای کد و کاهش ریسک سوءاستفاده در زنجیره تأمین نرمافزار طراحی شدهاند.
از نگاه امنیتی، این تصمیم یک پیام روشن دارد: دیگر نباید به همه چیز در زمان نصب اعتماد پیشفرض داشته باشیم. اجرای خودکار اسکریپتها سالها یکی از نقاط حساس در پروژههای Node.js بوده و حالا GitHub میخواهد این رفتار را از «اعتماد پیشفرض» به «اجازهمحور» تبدیل کند؛ یعنی فقط بستههایی که واقعاً به آنها اعتماد دارید، اجازه اجرای اسکریپت بگیرند.
برای آمادگی، GitHub توصیه میکند توسعهدهندگان از npm 11.16.0 یا بالاتر استفاده کنند، نصب عادی پروژه را اجرا کنند و هشدارها را بررسی کنند. سپس با دستور npm approve-scripts --allow-scripts-pending میتوان دید کدام بستهها اسکریپت دارند، آنهایی را که قابلاعتماد هستند تأیید کرد و در نهایت تغییرات را در package.json ثبت کرد. ابزار مکمل آن نیز npm deny-scripts است که برای رد کردن بستههای بررسینشده به کار میرود.

این تغییر برای تیمهای DevOps و CI/CD هم مهم است، چون بسیاری از pipelineها به نصب وابستگیها در محیطهای خودکار متکی هستند. اگر پروژهای به اسکریپتهای نصب، بستههای Git-based یا منابع remote وابسته باشد، از حالا باید آن وابستگیها را شناسایی و مسیر جایگزین یا allowlist مشخص تعریف کند؛ وگرنه بعد از مهاجرت به npm v12، بخشی از فرایند build ممکن است متوقف شود.
جمعبندی خبری-آموزشی
این تصمیم GitHub را میتوان یکی از مهمترین قدمها برای سختگیرانهتر کردن امنیت اکوسیستم npm دانست. پیام اصلی ساده است: در دنیای امروز، زنجیره تأمین نرمافزار فقط با npm install امن نمیشود؛ باید مشخص کنیم چه چیزی واقعاً اجازه اجرا دارد و چه چیزی نه. برای تیمهای فنی، بهترین کار این است که همین حالا پروژهها را با نسخههای جدید npm بررسی کنند، اسکریپتهای ضروری را شناسایی کنند و allowlist را قبل از انتشار نهایی v12 آماده نگه دارند.
دیدگاه خود را به اشتراک بگذارید