มุมมอง
Russ Cox วิศวกรกิตติมศักดิ์ (Distinguished Engineer) ของกูเกิล และทีมพัฒนาภาษา Go เขียนบล็อคถึงประเด็นที่นักพัฒนาโมดูล color.js และ faker.js ใส่โค้ดทำให้แอปอื่นๆ พังโดยจงใจ ว่ายังดีที่โค้ดนี้ไม่ได้ทำอะไรมุ่งร้ายมากไปกว่าทำให้แอปพังเพราะโค้ดพิมพ์ขยะจนเต็มหน้า แต่หลังจากเหตุการณ์นี้ NPM ปรับปรุงเพื่อรับมือปัญหาแบบนี้ในอนาคต
แนวทางของ Cox เสนอให้ NPM เลิกดึงเวอร์ชั่นล่าสุดของ dependency เป็นค่าเริ่มต้น เพราะพฤติกรรมแบบนี้จะทำให้เวอร์ชั่นใหม่สุดที่ยังไม่ได้ทดสอบเป็นวงกว้างถูกดาวน์โหลดไปใช้งานทันที ขณะที่ภาษาอื่นๆ เช่น ภาษา Go นั้นจะดึงเวอร์ชั่นที่ใหม่พอที่จะใช้งานได้เท่านั้น ทำให้เมื่อนักพัฒนาอัพโหลดเวอร์ชั่นใหม่เอี่ยมก็จะถูกใช้งานในวงจำกัดไปก่อน และโมดูลต่างๆ ค่อยอัพเดตเลขเวอร์ชั่นกันตามมาภายหลัง
เขายังระบุว่า NPM ไม่ต้องทำตาม Go เพราะโครงการที่ใช้ NPM ก็มีไฟล์ package-lock.json อยู่แล้ว ทำให้รู้ว่าแต่ละโครงการทดสอบกับ dependency เวอร์ชั่นอะไรบ้าง หาก NPM ดึงแพ็กเกจตามนั้นก็จะได้ dependency เวอร์ชั่นที่ทดสอบแล้วโดยแต่ละโครงการ เหตุการณ์เช่น AWS CDK รันไม่ได้ก็จะไม่เกิดขึ้นเอง นอกจาก NPM แล้ว Cox ก็ยังระบุว่าบริการ package manager อื่นๆ ก็ควรสำรวจว่าจะรับมือกับปัญหารูปแบบนี้อย่างไร เพราะในอนาคตการโจมตีรูปแบบเดียวกันนี้จะร้ายแรงกว่าครั้งนี้
ที่มา - research!rsc