Interfejs API geolokalizacji został usunięty z niezabezpieczonych źródeł w Chrome 50

Paul Kinlan
Paul Kinlan

W Chrome intuicja publiczna wycofuje zaawansowane funkcje, takie jak geolokalizacja w niezabezpieczonych źródłach, i mamy nadzieję, że inni pójdą w ich ślady.

Od wersji Chrome 50 Chrome nie obsługuje już uzyskiwania lokalizacji użytkownika przy użyciu interfejsu API geolokalizacji HTML5 ze stron dostarczanych przez niezabezpieczone połączenia. Oznacza to, że strona wykonująca wywołanie interfejsu Geolocation API musi być wyświetlana z bezpiecznego kontekstu, np. HTTPS.

To ważna kwestia, ponieważ wpływa bezpośrednio na każdą witrynę, która wymaga korzystania z interfejsu API geolokalizacji i nie jest obsługiwana przez protokół HTTPS. Jednak jest to zmiana, która naszym zdaniem jest korzystna dla wszystkich użytkowników internetu. Ten post pomoże Ci zrozumieć argumentację i dowiedzieć się, co zrobić dalej.

Kiedy nastąpi zmiana?

Ta zmiana obowiązuje od Chrome 50 (12:00 czasu PST 20 kwietnia 2016 r.).

Ostrzeżenia w konsoli z narzędziami dla programistów Chrome są wyświetlane od wersji 44 (opublikowanej 21 lipca 2015 r.).
Opublikowaliśmy już wiele publicznych ogłoszeń, które opisują uzasadnienie tej zmiany (i dyskusję):

Istnieje wiele innych źródeł, które to potwierdzają: Mobiforge (26 stycznia 2016 r.), Wired (17 marca 2016 r.), VentureBeat (13 kwietnia 2016 r.).

Dlaczego wprowadzamy tę zmianę?

Lokalizacja to dane wrażliwe! Wymaganie protokołu HTTPS jest wymagane do ochrony prywatności danych o lokalizacji użytkowników. Jeśli informacje o lokalizacji użytkownika są dostępne w niezabezpieczonym kontekście, osoby przeprowadzające atak w sieci będą mogły sprawdzić, gdzie znajduje się użytkownik, co poważnie narusza jego prywatność.

Kogo to dotyczy?

Wpływa to na wszystkie strony, które obecnie korzystają z interfejsu API geolokalizacji, pochodzące ze stron wyświetlanych przez HTTP (niezabezpieczone). Ma to również wpływ na elementy iframe HTTPS, które używają interfejsu Geolocation API, jeśli są umieszczone na stronach HTTP. Nie będzie można korzystać z kodu polyfill za pomocą udostępnionej ramki przesyłanej przez HTTPS.

Czy moja aplikacja internetowa potrzebuje protokołu HTTPS?

Aby korzystać z geolokalizacji, nie wymagamy, aby cała aplikacja była udostępniana przez HTTPS. Tylko strony korzystające z geolokalizacji muszą być wyświetlane w bezpiecznym kontekście. Kontekst bezpieczny to obecnie wszystko, co jest hostowane na najwyższym poziomie przez HTTPS lub host lokalny. Na przykład element iframe wskazujący bezpieczne źródło, ale hostowany w niezabezpieczonym źródle (http ://paul.kinlan.me/), nie może wywoływać interfejsu API geolokalizacji.

Zdecydowanie zalecamy przejście na protokół HTTPS, ponieważ nowe i dotychczasowe funkcje przegl��darki wymagają bezpiecznych źródeł.

Czy wpływa to na rozwój lokalny?

Nie, host lokalny został zadeklarowany w specyfikacji jako „potencjalnie bezpieczny” i w naszym przypadku żądania geolokalizacji wysyłane na najwyższym poziomie przez host lokalny wciąż będą działać.

Czy mogę wykryć w czasie działania, czy geolokalizacja została zablokowana z powodu braku bezpiecznego kontekstu?

Tak. Specyfikacja geolokalizacji definiuje obiekt PositionError, który jest przekazywany do wywołania zwrotnego niepowodzenia interfejsów API geolokalizacji. Obiekt definiuje właściwości code i message.

Błędy związane z tym problemem związanym z bezpiecznym kontekstem zwracają wartość code o wartości 1, co jest wynikiem „błędu odmowy uprawnień”. Ten błąd może wystąpić, gdy użytkownik odmówił dostępu lub system odmówił dostępu do lokalizacji użytkownika. Oznacza to, że musisz sprawdzić komunikat, aby poznać dokładny powód.

Może się to wydawać dość niepewne, ponieważ w przyszłości może się to zmienić. Wyraźnym sygnałem, że problem dotyczy niezabezpieczonych treści, jest szukanie ciągu „Dozwolone są tylko bezpieczne źródła”.

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

Pamiętaj, że nie możesz sprawdzić pochodzenia strony tylko dlatego, że strona może znajdować się w protokole https, ale wewnątrz elementu iframe hostowanego z niezabezpieczonego kontekstu.

Naprawdę muszę korzystać z geolokalizacji. Co mam zrobić?

Jeśli chcesz korzystać z interfejsu API geolokalizacji w HTML5 lub jeśli Twoja witryna używa już tego interfejsu, przenieś strony wykonujące wywołania interfejsu Geolocation API do HTTPS, aby mieć pewność, że są używane w bezpiecznym kontekście.

Istnieje wiele opcji zastępczych umożliwiających uzyskanie lokalizacji użytkownika, na które ta zmiana nie ma wpływu. Są to na przykład interfejs Geolocation API w Mapach Google, GeoIP (istnieją na przykład inne rozwiązania oparte na danych geograficznych) i kod pocztowy wpisany przez użytkownika. Zdecydowanie zalecamy jednak, aby najlepszym sposobem zapewnienia stałego dostępu do geolokalizacji jest przejście na protokół HTTPS.