นำ 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 (ไม่ปลอดภัย) และยังส่งผลต่อ HTTPS iframe ที่ใช้ Geolocation API หากฝังอยู่ในหน้า HTTP (คุณจะไม่สามารถทำ Polyfill โดยใช้เฟรมที่แสดง HTTPS ที่แชร์)

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

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

เราขอแนะนำอย่างยิ่งให้เปลี่ยนไปใช้ HTTPS เป็นฟีเจอร์เบราว์เซอร์ทั้งเก่าและใหม่ที่มีประสิทธิภาพต้องมีต้นทางที่ปลอดภัย

การเปลี่ยนแปลงนี้ส่งผลต่อการพัฒนาในท้องถิ่นไหม

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

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

ได้ ข้อกำหนดตำแหน่งทางภูมิศาสตร์กำหนดออบเจ็กต์ PositionError ที่ส่งผ่านไปยังการเรียกกลับที่ล้มเหลวของ 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