PNPM 10.16 เปิดตัวฟีเจอร์หน่วงเวลาเพื่อความปลอดภัยท่ามกลางความกังวลเรื่องการโจมตี Supply Chain

ทีมชุมชน BigGo
PNPM 10.16 เปิดตัวฟีเจอร์หน่วงเวลาเพื่อความปลอดภัยท่ามกลางความกังวลเรื่องการโจมตี Supply Chain

โลกของการจัดการแพ็กเกจ 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