Tags:
Topics: 
Node Thumbnail

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

Get latest news from Blognone

Comments

By: whitebigbird
Contributor
on 11 January 2022 - 08:00 #1236941
whitebigbird's picture

แต่หลังจากเหตุการณ์นี้ NPM ปรับปรุงเพื่อรับมือปัญหาแบบนี้ในอนาคต

แต่หลังจากเหตุการณ์นี้ NPM "ควร"ปรับปรุง

By: LazarusSP1
ContributoriPhone
on 11 January 2022 - 08:30 #1236948

yarn จะมีปัญหาเดียวกันไหมครับ

By: tisana
iPhoneAndroidUbuntuWindows
on 11 January 2022 - 09:11 #1236953

มันก็มี convention ของการใส่เลข version ใน package.json อยู่แล้วนี่นา ใครไม่อยากเสี่ยงก็ล็อกเลขไปหรือให้อัพเกรดระดับ minor version อย่างเดียวก็ได้หนิ
จริงๆเป็นฝั่งนักพัฒนาเองด้วยมากกว่าที่ควรเพิ่ม pattern มาสำหรับ code ที่ยังไม่ stable ก่อน tag release เช่นใส่ suffix -beta หรืออะไรก็ว่าไป

By: mr_tawan
ContributoriPhoneAndroidWindows
on 11 January 2022 - 09:28 #1236963 Reply to:1236953
mr_tawan's picture

คือ เค้าจะบอกว่า ระบบไม่ควรจะผลัก user ตกเหวเป็นค่ามาตรฐาน น่ะครับ


  • 9tawan.net บล็อกส่วนตัวฮับ
By: big50000
AndroidSUSEUbuntu
on 11 January 2022 - 10:35 #1236974 Reply to:1236953
big50000's picture

มันควรจะมีระดับของการเลือก upgrade บางคนอยากจะใช้เวอร์ชันที่ใหม่โดยที่ไม่อยากเสี่ยงมากจนเกินไปก็มี ถ้าล็อกแพ็กเกจแล้วลืม upgrade เจอปัญหา security อีก เท่าที่รู้ NPM ไม่มีตัวเลือกระดับการ upgrade ด้วย มนุษย์เป็นสิ่งมีชีวิตที่มีข้อบกพร่อง จะคาดหวังให้รอบคอบทุกอย่างเลยหรือยังไง

ยกตัวอย่างฝั่ง consumer เองก็ Manjaro เองยังต้องแยก repository ของตัวเองจาก Arch แล้วแยก stable branch/testing branch ต่ออีก ระบบที่ดีควรปกป้องผู้ใช้ตั้งแต่แรก

By: rattananen
AndroidWindows
on 11 January 2022 - 10:51 #1236980

จะให้ทำไงล่ะครับ อารมณ์ประมาณ
มีตำรวจทำงานมา 10 ปี อยู่ดีๆ เป็นผู้ร้ายยิงกราดซะงั้น
จะกันยังไงล่ะ

By: Ford AntiTrust
ContributorAndroidBlackberryUbuntu
on 11 January 2022 - 23:26 #1237056 Reply to:1236980
Ford AntiTrust's picture

สิ่งที่เค้าเสนอคือ "การป้องกันตำรวจกลายเป็นผู้ร้ายยิงกราด" เนี่ยแหละครับ

ซึ่งจากที่เสนอคือ lock version by default