การเลิกใช้งานและการนำออกใน Chrome 60

โจ เมดเลย์
โจ้ เมดเลย์

เราเห็นการอัปเดตและการปรับปรุงผลิตภัณฑ์ ประสิทธิภาพ และความสามารถของแพลตฟอร์มเว็บใน Chrome เกือบทุกเวอร์ชัน บทความนี้อธิบายการเลิกใช้งานและการนำออกใน Chrome 60 ซึ่งเป็นเวอร์ชันเบต้าตั้งแต่วันที่ 8 มิถุนายน รายการนี้อาจเปลี่ยนแปลงได้ตลอดเวลา

ความปลอดภัย

ตอนนี้ crypto.subtle ต้องใช้ต้นทางที่ปลอดภัยแล้ว

Web Crypto API ที่ได้รับการสนับสนุนตั้งแต่ Chrome 37 ทำงานในต้นทางที่ไม่ปลอดภัยเสมอ เนื่องจาก Chrome มีนโยบายเลือกใช้ต้นทางที่ปลอดภัยเพื่อใช้ฟีเจอร์ที่มีประสิทธิภาพมาอย่างยาวนาน crypto.subtleจึงไม่ปรากฏในต้นทางที่ปลอดภัยเท่านั้น

เจตนาเพื่อนำออก | ข้อบกพร่อง Chromium

นำการนำทางในเฟรมระดับบนสุดที่เริ่มต้นเนื้อหาไปยัง URL ข้อมูลออก

เนื่องจากผู้ใช้เบราว์เซอร์ที่ไม่เชี่ยวชาญทางเทคนิค เราจึงเห็นการใช้รูปแบบ data: ในการปลอมแปลงและการโจมตีแบบฟิชชิงมากขึ้นเรื่อยๆ เพื่อป้องกันไม่ให้เกิดเหตุการณ์เช่นนี้ เราจึงบล็อกไม่ให้หน้าเว็บโหลด URL data: ในเฟรมระดับบนสุด นโยบายนี้มีผลกับแท็ก <a>, window.open, window.location และกลไกที่คล้ายกัน ชุดรูปแบบ data: จะยังคงใช้ได้กับทรัพยากรที่โหลดโดยหน้าเว็บ

เราเลิกใช้งานฟีเจอร์นี้ใน Chrome 58 แล้ว และตอนนี้ได้ถูกนำออกแล้ว

เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง Chromium

ปิดใช้ navigator.sendBeacon() ชั่วคราวสำหรับบาง Blob

คุณใช้ฟังก์ชัน navigator.sendBeacon() ได้ตั้งแต่ Chrome 39 ตามดั้งเดิมที่นำมาใช้ อาร์กิวเมนต์ data ของฟังก์ชันอาจมี Blob ที่กำหนดเองซึ่งมีประเภทที่ไม่ได้อยู่ในรายการที่ปลอดภัยของ CORS เราเชื่อว่านี่เป็นภัยคุกคามด้านความปลอดภัยที่อาจเกิดขึ้นได้ แม้ว่าจะยังไม่มีใครพยายามใช้ช่องโหว่นี้ก็ตาม เนื่องจากเราไม่มีวิธีแก้ไขอย่างสมเหตุสมผลในทันที sendBeacon() จึงไม่สามารถเรียกใช้ใน BLOB ประเภทที่ไม่ใช่ CORS ได้อีกต่อไป

ถึงแม้ว่าการเปลี่ยนแปลงนี้มีผลกับ Chrome 60 แต่ได้ผสานการเปลี่ยนแปลงกลับไปเป็น Chrome 59 แล้ว

ข้อบกพร่อง Chromium

CSS

ทำให้ตัวรวมแท็กซ้อนสืบทอดเงาทำงานเหมือนชุดค่าผสมสืบทอด

ชุดค่าผสมสืบทอดเงา (>>>) ซึ่งเป็นส่วนหนึ่งของโมดูลการจำกัดขอบเขตของ CSS ระดับ 1 มีจุดประสงค์เพื่อจับคู่กับองค์ประกอบย่อยขององค์ประกอบระดับบนที่เฉพาะเจาะจง แม้ว่าองค์ประกอบเหล่านั้นจะปรากฏภายในเงาต้นไม้ก็ตาม ก่อนหน้านี้มีข้อจำกัดบางประการ อย่างแรก ตามข้อกำหนด กรณีนี้จะใช้ในการเรียก JavaScript เท่านั้น เช่น querySelector() และใช้งานไม่ได้ในสไตล์ชีต ที่สำคัญกว่านั้น ผู้ให้บริการเบราว์เซอร์ไม่สามารถทำให้ SDK นี้ทำงานเกินกว่า Shadow DOM หนึ่งระดับได้

ด้วยเหตุนี้ ชุดค่าผสมสืบทอดจึงถูกนำออกจากข้อกำหนดที่เกี่ยวข้อง รวมถึง Shadow DOM v1 แทนที่จะทำลายหน้าเว็บด้วยการนำตัวเลือกนี้ออกจาก Chromium เราได้เลือกที่จะใช้นามแฝงของชุดค่าผสมสืบทอดแบบฝังเงาเป็นชุดค่าผสมสืบทอดแทน ลักษณะการทำงานเดิมเลิกใช้งานแล้วใน Chrome 45 ลักษณะการทำงานแบบใหม่นี้จะใช้กับ Chrome 61

เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง Chromium

JavaScript

เลิกใช้งานและนำ RTCPeerConnection.getStreamById() ออก

เมื่อเกือบ 2 ปีที่ผ่านมา getStreamById() ได้ถูกถอดออกจากข้อกำหนด WebRTC เบราว์เซอร์อื่นๆ ส่วนใหญ่ได้นำส่วนนี้ออกจากการใช้งานแล้ว แม้เชื่อว่าฟังก์ชันนี้มีการใช้งานน้อย แต่ก็เชื่อว่ามีความเสี่ยงเล็กน้อยในการทำงานร่วมกันกับเบราว์เซอร์ Edge และ WebKit นอกเหนือจาก Safari ซึ่งยังคงรองรับ getStreamById() นักพัฒนาซอฟต์แวร์ที่ต้องการการติดตั้งใช้งานทางเลือกสามารถดูโค้ดตัวอย่างในส่วน "Intent to Remove" ได้ที่ด้านล่าง

การนำออกจะอยู่ใน Chrome 62

เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง Chromium

เลิกใช้งาน SVGPathElement.getPathSegAtLength

เรานำ getPathSegAtLength() ออกจากข้อกำหนดของ SVG มานานกว่า 2 ปีแล้ว เนื่องจากมี Hit เพียงไม่กี่รายการสำหรับเมธอดนี้ใน httparchive เราจึงเลิกใช้งานแอปนี้ใน Chrome 60 การนำออกควรอยู่ใน Chrome 62 ซึ่งจะจัดส่งประมาณต้นหรือกลางเดือนตุลาคม

ความตั้งใจที่จะเลิกใช้งาน | ตัวติดตาม Chromestatus | ข้อบกพร่อง Chromium

ย้าย getContextAttributes() ตามหลังแฟล็ก

ฟังก์ชัน getContextAttributes() ได้รับการรองรับใน CanvasRenderingContext2D มาตั้งแต่ปี 2013 แต่ฟีเจอร์ดังกล่าวไม่ได้เป็นส่วนหนึ่งของมาตรฐานใดๆ และไม่ได้กลายเป็นส่วนหนึ่งของมาตรฐานดังกล่าวนับตั้งแต่เวลานั้น คีย์ดังกล่าวควรติดตั้งไว้หลังแฟล็กบรรทัดคำสั่ง --enable-experimental-canvas-features แต่เกิดจากความผิดพลาด การตรวจสอบนี้ใน Chrome 60 ได้รับการแก้ไขแล้ว เชื่อกันว่าการเปลี่ยนแปลงนี้ปลอดภัย เนื่องจากไม่มีข้อมูลที่แสดงว่าทุกคนกำลังใช้วิธีการนี้

ข้อบกพร่อง Chromium

นำ Headers.prototype.getAll() ออก

ฟังก์ชัน Headers.prototype.getAll() จะถูกนำออกตามข้อกำหนดการดึงข้อมูลเวอร์ชันล่าสุด

เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง Chromium

นำ IndexingDB.webkitGetDatabaseNames() ออก

เราเพิ่มฟีเจอร์นี้เมื่อฐานข้อมูลที่จัดทำดัชนีนั้นค่อนข้างใหม่ใน Chrome และคำนำหน้าก็ได้รับความนิยมอย่างมาก API แบบอะซิงโครนัสจะแสดงผลรายการชื่อฐานข้อมูลที่มีอยู่ในต้นทาง ซึ่งดูเหมือนจะเหมาะสมมากพอ

ขออภัย การออกแบบมีข้อบกพร่อง ผลการค้นหาอาจล้าสมัยทันทีที่ส่งคืนมา จึงสามารถใช้เพื่อการบันทึกเท่านั้น ไม่ใช่ตรรกะของแอปพลิเคชันจริง ปัญหา GitHub จะติดตาม/ลิงก์ไปยังการสนทนาก่อนหน้านี้เกี่ยวกับทางเลือกอื่นๆ ซึ่งจะต้องใช้แนวทางอื่น แม้ว่านักพัฒนาซอฟต์แวร์จะให้ความสนใจอย่างต่อเนื่อง แต่การขาดการดำเนินการข้ามเบราว์เซอร์ ก็ทำให้ปัญหาได้รับการแก้ไขแล้วโดยผู้เขียนห้องสมุด

นักพัฒนาซอฟต์แวร์ที่ต้องการฟังก์ชันนี้ต้องพัฒนาโซลูชันของตนเอง ตัวอย่างเช่น ไลบรารีอย่าง Dexie.js จะใช้ตารางร่วมซึ่งเป็นฐานข้อมูลอื่นในการติดตามชื่อของฐานข้อมูล

เราเลิกใช้งานฟีเจอร์นี้ใน Chrome 58 แล้ว และตอนนี้ได้ถูกนำออกแล้ว

เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง Chromium

นำ WEBKIT_KEYFRAMES_RULE และ WEBKIT_KEYFRAME_RULEออก

ระบบจะนำค่าคงที่ WEBKIT_KEYFRAMES_RULE และ WEBKIT_KEYFRAME_RULE ที่ไม่ใช่ค่ามาตรฐานออกจากกฎ CSS นักพัฒนาแอปควรใช้ KEYFRAMES_RULE และ KEYFRAME_RULE แทน

เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง Chromium

อินเทอร์เฟซผู้ใช้

ต้องใช้ท่าทางสัมผัสของผู้ใช้สำหรับกล่องโต้ตอบ beforeunload

ตั้งแต่ Chrome 60 เป็นต้นไป กล่องโต้ตอบ beforeunload จะปรากฏก็ต่อเมื่อเฟรมที่พยายามจะแสดงเฟรมได้รับท่าทางสัมผัสของผู้ใช้หรือการโต้ตอบของผู้ใช้ (หรือเฟรมที่ฝังอยู่ได้รับท่าทางสัมผัสดังกล่าว) ขออธิบายให้ชัดเจน เรื่องนี้ไม่ใช่การเปลี่ยนแปลงการจ่ายงานของกิจกรรม beforeunload เพียงแต่เป็นการเปลี่ยนแปลง ว่ากล่องโต้ตอบแสดงหรือไม่

กล่องโต้ตอบ beforeunload เป็นกล่องโต้ตอบที่เป็นโมดัลแอป ดังนั้นโดยพื้นฐานแล้ว การดำเนินการดังกล่าวจึงมีความประสงค์ร้ายต่อผู้ใช้ ซึ่งหมายความว่าโปรแกรมจะตอบสนองต่อการไปยังส่วนต่างๆ ของผู้ใช้ด้วยการตั้งคำถามถึงการตัดสินใจของผู้ใช้ ใช้ฟีเจอร์นี้ในเชิงบวก ตัวอย่างเช่น มักใช้เพื่อเตือนผู้ใช้ เมื่อพวกเขาจะสูญเสียข้อมูลเมื่อไปยังส่วนต่างๆ

แม้ว่าความสามารถในการแสดงข้อความสําหรับกล่องโต้ตอบ beforeunload ของหน้าเว็บจะถูกนำออกไปได้สักพัก แต่กล่องโต้ตอบ beforeunload ยังคงเป็นเวกเตอร์ของการละเมิด โดยเฉพาะอย่างยิ่ง กล่องโต้ตอบ beforeunload เป็นองค์ประกอบหนึ่งของเว็บไซต์กลโกง ซึ่งเสียงการเล่นอัตโนมัติและข้อความข่มขู่ให้บริบทที่ Chromium แสดงข้อความ "แน่ใจไหมว่าคุณต้องการออกจากหน้านี้" จึงกลายเป็นสิ่งที่น่ากังวล

เราต้องการปักหมุดและอนุญาตเฉพาะการใช้กล่องโต้ตอบ beforeunload ให้เป็นประโยชน์เท่านั้น การใช้กล่องโต้ตอบที่ดีคือเมื่อผู้ใช้มีสถานะว่าอาจสูญหาย หากผู้ใช้ไม่เคยโต้ตอบกับหน้าเว็บ ผู้ใช้จะไม่มีสถานะใดๆ ที่อาจสูญหายไป เราจึงไม่เสี่ยงที่จะสูญเสียข้อมูลผู้ใช้โดยการระงับกล่องโต้ตอบในกรณีนั้น