NPM 12 स्क्रिप्ट एक्झिक्यूशनची पद्धत बदलत आहे

गेल्या १९ वर्षांपासून, npm install आपोआप कोड रन करत असे. यामध्ये preinstall आणि postinstall सारख्या lifecycle hooks चा वापर केला जात असे. तुम्ही एखादे पॅकेज डाउनलोड केले की, तुम्ही कोड तपासण्यापूर्वीच ते स्क्रिप्ट्स रन करत असे.

ही 'ट्रस्ट मॉडेल' (trust model) पद्धत npm 12 सोबत संपत आहे.

जुलै २०२६ पासून, GitHub 'opt-out' कडून 'opt-in' कडे वळत आहे. हा बदल तुमच्या सप्लाय चेनला (supply chain) हल्लेखोरांपासून सुरक्षित ठेवतो.

npm 12 मध्ये खालील बदल होतील:

  • preinstall किंवा postinstall सारखे dependency scripts आपोआप रन होणार नाहीत. त्यांना परवानगी देण्यासाठी तुम्हाला npm approve-scripts वापरावे लागेल.
  • node-gyp द्वारे होणारे native module builds डिफॉल्टनुसार ब्लॉक केले जातील. तुम्हाला त्यांना स्पष्टपणे (explicitly) परवानगी द्यावी लागेल.
  • Git आणि remote URL dependencies आपोआप रिझॉल्व्ह (resolve) होणार नाहीत. त्यासाठी तुम्हाला --allow-git किंवा --allow-remote फ्लॅग वापरावा लागेल.
  • एक नवीन min-release-age सेटिंग तुम्हाला नवीन पॅकेज व्हर्जन ब्लॉक करण्याची सुविधा देते. एखादे पॅकेज तपासण्यासाठी (vetted) पुरेसे जुने आहे याची खात्री करण्यासाठी तुम्ही टाइमर सेट करू शकता.

हल्लेखोर सध्याच्या या प्रणालीचा फायदा घेतात. अलीकडेच axios च्या एका घातक (malicious) व्हर्जनमध्ये असे एक टूल पाठवण्यात आले होते, जे इन्स्टॉलेशनच्या एक सेकंदानंतर रन झाले. ते तीन तास सक्रिय राहिले. लाखो युजर्सना धोक्यात आणण्यासाठी एवढा वेळ पुरेसा आहे.

तुम्ही आतापासूनच तयारी करू शकता. जर तुम्ही npm 11.16.0 किंवा त्यापेक्षा उच्च व्हर्जन वापरत असाल, तर ही कमांड रन करा:

npm approve-scripts --allow-scripts-pending

यामुळे कोणत्या dependencies स्क्रिप्ट्स रन करतात हे तुम्हाला समजेल. तुम्ही ज्यांच्यावर विश्वास ठेवता त्यांना परवानगी देऊ शकता आणि त्यांना तुमच्या package.json मध्ये सेव्ह करू शकता. हा मोठा बदल (breaking change) लागू होण्यापूर्वीच हे करून घ्या.

स्त्रोत: https://dev.to/ranjansingh41/npm-12-will-change-script-execution-behavior-to-prevent-attacks-45lg

ऐच्छिक लर्निंग कम्युनिटी: https://t.me/GyaanSetuAi