Perubahan kompatibilitas yang akan merusak pada npm v12
(github.blog)- Di npm v12, nilai default terkait keamanan untuk
npm installakan berubah dari eksekusi·resolusi otomatis menjadi model izin eksplisit, dan perubahan ini bisa diperiksa lebih awal melalui peringatan di npm 11.16.0 atau yang lebih baru - Nilai default
allowScriptsakan berubah menjadi nonaktif, sehingga eksekusi skrippreinstall,install,postinstalldari dependensi yang tidak diizinkan secara eksplisit,node-gyp rebuildimplisit, serta skrippreparedari dependensi git·file·link akan diblokir - Gunakan
npm approve-scripts --allow-scripts-pendinguntuk memeriksa paket yang akan diblokir, tentukan izin·blokir dengannpm approve-scriptsdannpm deny-scripts, lalu commit allowlist yang dihasilkan kepackage.json - Nilai default
--allow-gitakan berubah menjadinone, sehingga resolusi dependensi Git langsung maupun transitif yang tidak diizinkan secara eksplisit dengan--allow-gitakan dihentikan - Menutup jalur eksekusi kode di mana
.npmrcdari dependensi Git dapat menimpa executable Git bahkan saat menggunakan--ignore-scripts - Nilai default
--allow-remoteakan berubah menjadinone, sehingga resolusi dependensi URL jarak jauh seperti tarball https yang tidak diizinkan secara eksplisit dengan--allow-remoteakan dihentikan - Nilai default
--allow-filedan--allow-directorytidak berubah di npm v12 - Prosedur persiapan adalah upgrade ke npm 11.16.0 atau yang lebih baru, jalankan instalasi biasa untuk meninjau peringatan, setujui hanya paket yang tepercaya, lalu setelah upgrade hanya skrip yang sudah disetujui yang akan terus dijalankan
- Dokumentasi terkait:
npm approve-scripts,npm deny-scripts,allow-scriptsconfig
1 komentar
Opini di Hacker News
Entah bagaimana saya luput bahwa npm diakuisisi oleh GitHub, tapi tiba-tiba banyak hal mulai masuk akal
Sulit membayangkan rumah yang lebih buruk untuk bagian ekosistem Node yang sepenting ini
https://github.blog/news-insights/company-news/npm-is-joinin...
Ini adalah “embrace, extend, extinguish”
https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguis...
skrip postinstall seharusnya sudah dihapus sejak lama, dan merupakan kanker pada paket NPM
Terlalu sering saat mengambil sesuatu, postinstall yang sangat bersarang dan tidak terkendali dijalankan secara acak
Saya tidak tahu siapa yang pernah menganggap ini ide bagus
Biasanya Anda toh akan menjalankan kode dependensi yang dipaketkan itu pada suatu titik, dan umumnya dengan hak akses yang sama seperti proses instalasi
Jadi skrip setup seperti ini, baik atau buruk, hanya memindahkan titik masuknya dari npm ke tempat
importataurequireterjadiKecuali seluruh ekosistem pindah ke lingkungan sandbox seperti Deno, ini paling banter tampak seperti hambatan kecil. Mungkin memang itu rencananya
Contoh yang langsung terlintas adalah https://www.npmjs.com/package/patch-package
Semoga histeria saat ini tidak berujung pada keputusan sia-sia seperti ini
Rasanya hal ini sudah dibahas ratusan kali di internal NPM sejak diumumkan 10 tahun lalu
Karena Shai Halud, sekarang ini sudah terlalu besar untuk diabaikan
“Nanti saya perbaiki” hampir selalu menjadi “sial, sekarang harus saya perbaiki”
Saya penasaran apakah versi Node LTS saat ini, kalau tidak salah 22, 24, 26, akan menaikkan npm bawaan ke v12 agar mendapat manfaat dari perbaikan keamanan ini
Saat ini semuanya menyertakan npm v11
Pada v18.19.0[1] dan v20.10.0[2], npm dinaikkan dari 9 ke 10
[1]: https://nodejs.org/en/blog/release/v18.19.0#npm-updated-to-v...
[2]: https://nodejs.org/en/blog/release/v20.10.0
Seperti yang tertulis di artikel, cukup atur default yang sesuai
Bagian terbaik dari perubahan ini adalah, dengan berubahnya default, paket-paket menyebalkan yang mengasumsikan pengaturan ini aktif saat developer baru sekadar menjalankan install akan langsung rusak
Misalnya, ini bisa menghentikan kebiasaan yang mengharapkan skrip dapat dijalankan
Dari artikelnya tidak terlalu jelas, tetapi tampaknya allowlist skrip mendukung izin per paket, bukan konfigurasi global
Ini sepertinya akan mempermudah pemeliharaan kebijakan tingkat organisasi yang hanya mengizinkan skrip untuk paket tertentu
Saya penasaran apakah ada linter yang bisa dipakai untuk mencegah default tidak aman dalam konfigurasi package manager seperti ini
grepsaja cukup?Saya penasaran apakah masih ada alasan untuk memakai Yarn
Saya tidak tahu apakah Yarn juga telah menerapkan perlindungan untuk mencegah serangan supply chain
Selama ini saya hanya tahu pnpm, jadi bagus kalau npm ikut menyusul
Rilis Yarn terbaru, 4.x, menjamin perilaku deterministik secara berlebihan, dan Anda bisa mengharapkan perilaku yang konsisten di seluruh tim
Dari sisi fitur, ada banyak detail kecil, dan setelah terbiasa semuanya bergabung menjadi perbedaan besar
Rilis mayor berikutnya juga akan terus mendorong ke arah yang sama, dengan performa yang lebih baik dan fitur-fitur yang selama ini belum bisa diimplementasikan karena bergantung pada peningkatan performa itu
Sebagai catatan, saya adalah lead maintainer Yarn
Fitur perlindungan supply chain juga ada
Pada akhirnya saya tidak tahan dan pindah ke pnpm, dan instalasi jadi jauh lebih cepat baik di CI maupun di mesin pengembangan lokal
Dengan bantuan LLM, migrasinya memakan waktu sekitar satu hari
node_moduleshttps://yarnpkg.com/features/pnp
Ini cukup mirip dengan penggunaan
.jardi Java alih-alih pohon direktori file.classHanya saja agak hacky, dan dukungan editor serta tool berbeda-beda
Karena jumlah file kecilnya jauh lebih sedikit, ini bisa jauh lebih cepat terutama jika terpaksa bekerja di Windows
Arsipnya juga bisa dimasukkan ke repositori git, sehingga ketergantungan pada internet dan package registry bisa dihilangkan
Saya benar-benar tidak tahu jawabannya
Saya tidak tahu npm dimiliki GitHub
Itu menjelaskan banyak hal
Sebagian terasa menarik dibaca setelah sekian waktu
Komentar teratas berbunyi kurang lebih: “Microsoft tidak selalu melakukan semuanya dengan benar, tetapi akuisisi GitHub sejujurnya berjalan jauh lebih baik dari perkiraan. Alih-alih memaksakan kebijakan berpusat pada Microsoft ke GitHub, justru Microsoft yang lebih banyak mengadopsi hal-hal dari GitHub dari sudut pandang produk. GitHub masih beroperasi seperti perusahaan terpisah”
Mereka mendapat pendanaan ventura tetapi tidak pernah menemukan model bisnis yang berkelanjutan
GitHub mengakuisisinya untuk menyelamatkan ekosistem, dan akuisisi ini juga nyaris tidak memberi keuntungan besar bagi GitHub
Dan Microsoft memindahkan GitHub ke Azure
Saya penasaran apakah allowlist di
package.jsonitu mengunci hingga versi paket, atau hanya nama paket sajaMenyenangkan bahwa default
allowScriptsdimatikan[melihat jam] Jadi ini berarti 18 bulan terlambat mengikuti pnpm?
Sebenarnya ini untuk tujuan apa di dunia JavaScript?