นำ API ตำแหน่งทางภูมิศาสตร์ออกจากต้นทางที่ไม่ปลอดภัยใน Chrome 50 แล้ว

Chrome มีเจตนาสาธารณะที่จะเลิกใช้งานฟีเจอร์ที่มีประสิทธิภาพ เช่น ตำแหน่งทางภูมิศาสตร์ในต้นทางที่ไม่ปลอดภัย และเราหวังว่าผู้อื่นจะปฏิบัติตาม

ตั้งแต่ Chrome 50 เป็นต้นไป Chrome จะไม่รองรับการระบุตำแหน่งของผู้ใช้โดยใช้ HTML5 Geolocation API จากหน้าที่แสดงโดยการเชื่อมต่อที่ไม่ปลอดภัยอีกต่อไป ซึ่งหมายความว่าหน้าเว็บที่เรียก Geolocation API ต้องแสดงจากบริบทที่ปลอดภัย เช่น HTTPS

ปัญหานี้สำคัญเนื่องจากจะส่งผลโดยตรงต่อเว็บไซต์ที่ต้องใช้ API ตำแหน่งทางภูมิศาสตร์และไม่ได้ให้บริการผ่าน https แต่การเปลี่ยนแปลงนี้เป็นสิ่งที่เราเชื่อว่าจะเป็นประโยชน์ต่อผู้ใช้ทุกคนบนเว็บ โพสต์นี้จะช่วยให้คุณเข้าใจเหตุผลและวิธีดำเนินการต่อ

การเปลี่ยนแปลงนี้จะเกิดขึ้นเมื่อใด

การเปลี่ยนแปลงนี้มีผลตั้งแต่ Chrome 50 (12:00 น. PST วันที่ 20 เมษายน 2016)

คอนโซลเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ของ Chrome ได้แสดงคำเตือนมาตั้งแต่เวอร์ชัน 44 (เผยแพร่เมื่อวันที่ 21 กรกฎาคม 2015)
เราได้ประกาศต่อสาธารณะหลายครั้งซึ่งอธิบายเหตุผล (และการพูดคุย) ว่าทําไมเราจึงทําการเปลี่ยนแปลงนี้

แหล่งที่มาอื่นๆ ที่ไฮไลต์เรื่องนี้ ได้แก่ Mobiforge (26 ม.ค. 2016), Wired (17 มี.ค. 2016), VentureBeat (13 เม.ย. 2016)

เพราะเหตุใดเราจึงทำการเปลี่ยนแปลงนี้

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

ใครจะได้รับผลกระทบบ้าง

ซึ่งจะส่งผลต่อหน้าเว็บที่ใช้ Geolocation API จากหน้าที่แสดงผ่าน HTTP (ไม่ปลอดภัย) อยู่ในปัจจุบัน และยังส่งผลต่อ iframe ของ HTTPS ที่ใช้ Geolocation API หากฝังอยู่ในหน้า HTTP ด้วย (คุณจะใช้ PMD โดยใช้เฟรมที่ส่งผ่าน HTTPS ร่วมกันไม่ได้)

เว็บแอปทั้งแอปของฉันต้องใช้ HTTPS ไหม

ไม่จําเป็นต้องแสดงแอปทั้งหมดผ่าน HTTPS เพื่อใช้การระบุตําแหน่งทางภูมิศาสตร์ เฉพาะหน้าที่ใช้การกำหนดตำแหน่งทางภูมิศาสตร์เท่านั้นที่ต้องแสดงในบริบทที่ปลอดภัย ปัจจุบันบริบทที่ปลอดภัยคือทุกอย่างที่โฮสต์ที่ระดับบนสุดใน HTTPS หรือ localhost ตัวอย่างเช่น iframe ที่ชี้ไปยังต้นทางที่ปลอดภัยแต่โฮสต์ในต้นทางที่ไม่ปลอดภัย (http ://paul.kinlan.me/) จะไม่ได้รับอนุญาตให้เรียกใช้ Geolocation API

เราขอแนะนําอย่างยิ่งให้คุณเปลี่ยนไปใช้ HTTPS เนื่องจากฟีเจอร์ใหม่และฟีเจอร์ที่มีอยู่ของเบราว์เซอร์ต้องใช้ต้นทางที่ปลอดภัย

การดำเนินการนี้จะส่งผลต่อการพัฒนาในพื้นที่หรือไม่

ไม่ localhost ได้รับการประกาศว่า "มีแนวโน้มที่จะปลอดภัย" ในข้อกำหนด และในกรณีของเรา คำขอตำแหน่งทางภูมิศาสตร์ที่แสดงที่ระดับบนสุดผ่าน localhost จะยังคงทำงานได้

ฉันจะตรวจจับได้ไหมเมื่อรันไทม์ว่าระบบบล็อกตําแหน่งทางภูมิศาสตร์เนื่องจากไม่ได้อยู่ในบริบทที่ปลอดภัย

ได้ ข้อมูลจำเพาะของตำแหน่งทางภูมิศาสตร์จะกำหนดออบเจ็กต์ PositionError ที่ส่งไปยังการเรียกกลับที่ดำเนินการไม่สำเร็จของ Geolocation API ออบเจ็กต์จะกำหนดพร็อพเพอร์ตี้ code และ message

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

ข้อความนี้อาจเปลี่ยนแปลงได้ในอนาคต แต่สัญญาณที่ชัดเจนว่าปัญหาเกิดจากเนื้อหาที่ไม่ปลอดภัยคือมองหาสตริง "อนุญาตเฉพาะต้นทางที่ปลอดภัย"

navigator.geolocation.getCurrentPosition(success => {
    /* Do some magic. */
}, failure => {
    if (failure.message.startsWith("Only secure origins are allowed")) {
    // Secure Origin issue.
    }
});

โปรดทราบว่าคุณไม่สามารถตรวจสอบแค่ต้นทางของหน้าเว็บได้ เนื่องจากหน้าเว็บอาจอยู่ใน https แต่อยู่ภายใน iframe ที่โฮสต์จากบริบทที่ไม่ปลอดภัย

ฉันจำเป็นต้องใช้ตำแหน่งทางภูมิศาสตร์ ฉันควรทำอย่างไร

หากต้องการใช้ HTML5 Geolocation API หรือหากเว็บไซต์ของคุณใช้ Geolocation API อยู่แล้ว โปรดย้ายข้อมูลหน้าเว็บที่เรียกใช้ Geolocation API ไปยัง HTTPS เพื่อให้แน่ใจว่าหน้าเว็บดังกล่าวใช้งานได้ในบริบทที่ปลอดภัย

มีตัวเลือกสำรองหลายรายการในการรับตำแหน่งของผู้ใช้ที่ไม่ได้รับผลกระทบจากการเปลี่ยนแปลงนี้ เช่น Google Maps Geolocation API, GeoIP (ตัวอย่างคือมีโซลูชันอื่นๆ ตามภูมิศาสตร์) และรหัสไปรษณีย์ที่ผู้ใช้ป้อน อย่างไรก็ตาม เราขอแนะนำอย่างยิ่งว่าเส้นทางที่ดีที่สุดในการเข้าถึงตำแหน่งทางภูมิศาสตร์อย่างต่อเนื่องคือการเปลี่ยนไปใช้ HTTPS