โลกของการจัดการแพ็กเกจ JavaScript ได้รับผลกระทบจากการโจมตี supply chain ที่เกิดขึ้นเมื่อเร็ว ๆ นี้ซึ่งมุ่งเป้าไปที่แพ็กเกจยอดนิยม เพื่อตอบสนองต่อปัญหานี้ PNPM 10.16 ได้เปิดตัวฟีเจอร์ความปลอดภัยที่ก้าวล้ำซึ่งหน่วงเวลาการติดตั้ง dependencies ที่เพิ่งเปิดตัวใหม่ ทำให้เกิดการถ้อยทีถ้อยอาทย์อย่างรุนแรงในชุมชนนักพัฒนาเกี่ยวกับการสร้างสมดุลระหว่างความปลอดภัยกับลักษณะการพัฒนาเว็บสมัยใหม่ที่เปลี่ยนแปลงอย่างรวดเร็ว
ภาวะที่กลืนไม่เข้าคายไม่ออกด้านความปลอดภัย: ความเร็วเทียบกับความปลอดภัย
การตั้งค่า minimumReleaseAge
ใหม่ช่วยให้นักพัฒนาสามารถระบุได้ว่าต้องใช้เวลากี่นาทีหลังจากแพ็กเกจถูกเผยแพร่แล้ว PNPM จึงจะติดตั้งแพ็กเกจนั้น วิธีการนี้มีเป้าหมายเพื่อสร้างเขตกันชนที่แพ็กเกจที่เป็นอันตรายสามารถถูกตรวจพบและลบออกได้ก่อนที่จะแพร่กระจายอย่างกว้างขวาง ฟีเจอร์นี้มาพร้อมกับรายการยกเว้นสำหรับแพ็กเกจที่เชื่อถือได้ซึ่งต้องการการอัปเดตทันที
อย่างไรก็ตาม ชุมชนมีความเห็นแตกต่างกันเรื่องรายละเอียดการใช้งาน นักพัฒนาจำนวนมากตั้งคำถามเกี่ยวกับการเลือกใช้นาทีเป็นหน่วย โดยแนะนำว่ามาตรฐาน ISO8601 duration จะเป็นเรื่องที่เข้าใจง่ายกว่าและสอดคล้องกับแนวปฏิบัติในอุตสาหกรรม
คุณสมบัติด้านความปลอดภัยหลักของ PNPM 10.16:
minimumReleaseAge
: หน่วงเวลาการติดตั้งแพ็กเกจตามจำนวนนาทีที่กำหนดminimumReleaseAgeExclude
: อนุญาตให้มีข้อยกเว้นสำหรับแพ็กเกจที่เชื่อถือได้- คำแนะนำเริ่มต้น: หน่วงเวลา 1440 นาที (24 ชั่วโมง)
- ฟังก์ชัน Finder: เกณฑ์การค้นหา dependency แบบกำหนดเอง
- คำสั่ง
pnpm list
และpnpm why
ที่ปรับปรุงแล้วพร้อมแฟล็ก--find-by
ปัญหา Canary: ใครจะเป็นคนทดสอบก่อน?
การอภิปรายที่น่าสนใจได้เกิดขึ้นเกี่ยวกับสิ่งที่นักพัฒนาเรียกว่าปัญหา canary หากทุกคนหน่วงเวลาการติดตั้งแพ็กเกจไว้หลายวัน แล้วใครจะเป็นคนแรกที่ตรวจพบแพ็กเกจที่ถูกบุกรุก? ชุมชนดูเหมือนจะพบคำตอบที่ไม่คาดคิด: ผู้ใช้ NPM จะยังคงทำหน้าที่เป็นผู้นำร่อง ในขณะที่ผู้ใช้ PNPM ได้รับประโยชน์จากตาข่ายนิรภัยของการติดตั้งที่หน่วงเวลา
หลายคนจะยังคงใช้ npm ดังนั้นพวกเขาจะเป็นนกคะแนรี่ในเหมืองถ่านหิน
สิ่งนี้สร้างพลวัตของระบบนิเวศที่น่าสนใจซึ่งตัวจัดการแพ็กเกจที่แตกต่างกันให้บริการโปรไฟล์ความเสี่ยงที่แตกต่างกันภายในชุมชน JavaScript
วัฒนธรรมการอัปเดตที่เป็นเอกลักษณ์ของ JavaScript
การถ้อยทีถ้อยอาทย์ยังเน้นย้ำความแตกต่างพื้นฐานระหว่าง JavaScript และระบบนิเวศการเขียนโปรแกรมอื่น ๆ ในขณะที่นักพัฒนา C++ อาจรอหลายเดือนก่อนที่จะนำ dependencies ใหม่มาใช้ นักพัฒนา JavaScript มักจะอัปเดตแพ็กเกจภายในไม่กี่วันหรือไม่กี่สัปดาห์ ความเร่งด่วนนี้เกิดจากลักษณะที่สำคัญต่อความปลอดภัยของแอปพลิเคชันเว็บและระบบ semantic versioning ที่สัญญาว่าการอัปเดตเล็กน้อยจะปลอดภัย
การอภิปรายของชุมชนเผยให้เห็นว่าแอปพลิเคชัน JavaScript ส่วนใหญ่เชื่อมต่อกับเครือข่ายและเผชิญกับภัยคุกคามด้านความปลอดภัยอย่างต่อเนื่อง ทำให้การแก้ไขความปลอดภัยอย่างรวดเร็วเป็นสิ่งจำเป็น อย่างไรก็ตาม ความเร่งด่วนเดียวกันนี้สร้างช่องโหว่ที่ผู้โจมตีสามารถใช้ประโยชน์ได้
ตัวอย่างการกำหนดค่า:
minimumReleaseAge: 1440 24 ชั่วโมงในหน่วยนาที
minimumReleaseAgeExclude:
- webpack
- react
ตัวอย่าง Finder Function:
module.exports = {
finders: {
react17: (ctx) => {
return ctx.readManifest().peerDependencies?.react === "^17.0.0";
}
}
}
เครื่องมือวิเคราะห์ Dependency ขั้นสูง
นอกเหนือจากการหน่วงเวลาเพื่อความปลอดภัยแล้ว PNPM 10.16 ยังเปิดตัว finder functions ที่ช่วยให้นักพัฒนาสามารถค้นหา dependencies ตามเกณฑ์ที่กำหนดเองแทนที่จะใช้เพียงชื่อแพ็กเกจ ฟีเจอร์นี้ช่วยให้สามารถสืบค้นที่ซับซ้อนได้ เช่น การค้นหาแพ็กเกจทั้งหมดที่มี peer dependencies หรือประเภทใบอนุญาตเฉพาะ ทำให้นักพัฒนามีการมองเห็น dependency trees ได้ดีขึ้น
การรวมกันของการหน่วงเวลาเพื่อความปลอดภัยและเครื่องมือวิเคราะห์ที่ปรับปรุงแล้วแสดงถึงแนวทางการจัดการ dependency ที่เติบโตขึ้น ซึ่งการมองเห็นและความระมัดระวังทำงานร่วมกันเพื่อปรับปรุงสถานะความปลอดภัยโดยรวม
การเปิดตัวนี้สะท้อนการเปลี่ยนแปลงที่กว้างขึ้นในระบบนิเวศ JavaScript ไปสู่แนวปฏิบัติการพัฒนาที่เน้นการป้องกันมากขึ้น โดยยอมรับว่าความเร็วและความสะดวกสบายที่ทำให้ NPM ได้รับความนิยมยังสร้างช่องโหว่ด้านความปลอดภัยที่ต้องการโซลูชันที่เป็นระบบ
อ้างอิง: pnpm 10.16