Geolocation API dihapus dari origin yang tidak aman di Chrome 50

Paul Kinlan
Paul Kinlan

Chrome memiliki niat publik untuk menghentikan penggunaan fitur canggih seperti geolokasi di asal yang tidak aman, dan kami harap pengguna lain akan mengikuti.

Mulai Chrome 50, Chrome tidak lagi mendukung perolehan lokasi pengguna menggunakan API Geolokasi HTML5 dari halaman yang ditayangkan oleh koneksi yang tidak aman. Artinya, halaman yang melakukan panggilan Geolocation API harus ditayangkan dari konteks aman seperti HTTPS.

Ini adalah masalah penting karena akan berdampak langsung pada situs yang memerlukan penggunaan API geolokasi dan tidak ditayangkan melalui https, tetapi ini adalah perubahan yang kami percaya bermanfaat bagi semua pengguna di web. Postingan ini akan membantu Anda memahami alasan dan cara melanjutkan.

Kapan nama fitur ini akan berubah?

Perubahan ini berlaku mulai Chrome 50 (20 April 2016 pukul 12.00 PST).

Konsol alat developer Chrome telah memberikan peringatan sejak versi 44 (dirilis 21 Juli 2015).
Ada sejumlah pengumuman publik yang menjelaskan alasan (dan diskusi) mengapa kami melakukan perubahan ini:

Ada sejumlah sumber lain yang telah menyoroti hal ini: Mobiforge (26 Januari 2016), Wired (17 Maret 2016), VentureBeat (13 April 2016).

Mengapa kami melakukan perubahan ini?

Lokasi adalah data sensitif! Mewajibkan HTTPS diperlukan untuk melindungi privasi data lokasi pengguna. Jika lokasi pengguna tersedia dalam konteks yang tidak aman, penyerang di jaringan dapat mengetahui lokasi pengguna tersebut. Ini sangat membahayakan privasi pengguna.

Siapa yang akan terpengaruh?

Hal ini memengaruhi halaman yang saat ini menggunakan Geolocation API dari halaman yang ditayangkan melalui HTTP (tidak aman). Hal ini juga memengaruhi iframe HTTPS yang menggunakan Geolocation API jika disematkan di halaman HTTP. (Anda tidak akan dapat mem-polyfill menggunakan frame yang dikirimkan HTTPS bersama.)

Apakah seluruh aplikasi web saya memerlukan HTTPS?

Untuk menggunakan Geolokasi, bukan persyaratan bahwa seluruh aplikasi ditayangkan melalui HTTPS. Hanya halaman yang menggunakan Geolokasi yang perlu ditayangkan melalui konteks yang aman. Konteks aman saat ini adalah apa pun yang dihosting di tingkat teratas di HTTPS atau localhost. Misalnya, iframe yang mengarah ke asal yang aman, tetapi dihosting di asal yang tidak aman (http ://paul.kinlan.me/) tidak akan diizinkan untuk memanggil API geolokasi.

Sebaiknya lakukan migrasi ke HTTPS karena fitur browser baru dan yang sudah ada memerlukan origin yang aman.

Apakah ini memengaruhi pembangunan lokal?

Seharusnya tidak, localhost telah dideklarasikan sebagai "berpotensi aman" dalam spesifikasi dan dalam kasus ini, permintaan geolokasi yang disalurkan di tingkat teratas melalui localhost akan tetap berfungsi.

Dapatkah saya mendeteksi pada saat runtime jika geolokasi diblokir karena tidak berada pada konteks yang aman

Ya. Spesifikasi geolokasi menentukan objek PositionError yang diteruskan ke callback kegagalan untuk Geolocation API. Objek ini menentukan properti code dan message.

Error karena masalah konteks aman ini akan menampilkan code dari 1 yang merupakan "Error Izin Ditolak". Error ini dapat terjadi saat pengguna menolak akses atau sistem menolak akses ke lokasi pengguna. Artinya, Anda harus memeriksa pesan tersebut untuk melihat alasan sebenarnya.

Ini bisa cukup rapuh karena mungkin berubah di masa mendatang, tetapi sinyal kuat bahwa ini adalah masalah konten yang tidak aman adalah mencari string "Hanya sumber aman yang diizinkan".

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

Ingat, Anda tidak bisa hanya memeriksa asal halaman karena halaman Anda mungkin berada di https, tetapi di dalam iframe yang dihosting dari konteks yang tidak aman.

Saya benar-benar perlu menggunakan Geolokasi; Apa yang harus saya lakukan?

Jika Anda ingin menggunakan API Geolokasi HTML5, atau jika situs Anda sudah menggunakan API Geolokasi, migrasikan halaman yang melakukan panggilan API Geolokasi ke HTTPS, pastikan halaman tersebut digunakan dalam konteks yang aman.

Ada sejumlah opsi penggantian yang tersedia untuk mendapatkan lokasi pengguna yang tidak terpengaruh oleh perubahan ini, seperti Google Maps Geolocation API, GeoIP (sebagai contoh, ada solusi berbasis geografis lainnya), dan kode pos yang dimasukkan pengguna. Namun, kami sangat menyarankan bahwa jalur terbaik untuk memastikan akses berkelanjutan ke geolokasi adalah beralih ke HTTPS.