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

Chrome ma zamiar publiczny w wycofaniu zaawansowanych funkcji, takich jak geolokalizacja w niezabezpieczonych źródłach. Mamy nadzieję, że inni również pójdą w tym śladem.

Od wersji Chrome 50 Chrome nie obsługuje już uzyskiwania informacji o lokalizacji użytkownika za pomocą interfejsu API geolokalizacji HTML5 ze stron wyświetlanych przez niezabezpieczone połączenia. Oznacza to, że strona wywołująca interfejs Geolocation API musi być wyświetlana w bezpiecznym kontekście, takim jak HTTPS.

To ważna kwestia, ponieważ będzie miała bezpośredni wpływ na wszystkie witryny, które wymagają korzystania z interfejsu API geolokalizacji i nie są obsługiwane przez HTTPS. Naszym zdaniem jest to jednak zmiana, która naszym zdaniem będzie korzystna dla wszystkich użytkowników internetu. Ten post pomoże Ci zrozumieć, jakie są argumenty i jak postępować dalej.

Kiedy nastąpi zmiana?

Zmiana ta obowiązuje od wersji Chrome 50 (20:00 czasu PST 20 kwietnia 2016 roku).

W konsoli z narzędziami dla programistów w Chrome pojawiają się ostrzeżenia od wersji 44 (udostępnionej 21 lipca 2015 r.).
Ogłoszono wiele publicznych ogłoszeń, w których wyjaśniamy powody, dla których wprowadzamy tę zmianę:

Kilka innych źródeł zwróciło na to uwagę: Mobiforge (26 stycznia 2016 r.), Wired (17 marca 2016 r.), VentureBeat (13 kwietnia 2016 r.).

Dlaczego wprowadzamy tę zmianę?

Lokalizacja to dane wrażliwe Wymóg stosowania protokołu HTTPS jest wymagany do ochrony prywatności danych o lokalizacji użytkowników. Jeśli lokalizacja użytkownika jest dostępna z niezabezpieczonego kontekstu, hakerzy w sieci mogą dowiedzieć się, gdzie jest użytkownik, co poważnie narusza jego prywatność.

Kogo to dotyczy?

Dotyczy to wszystkich stron, które obecnie korzystają z interfejsu Geolocation API, 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. (Polyfill nie będzie można korzystać z udostępnionej ramki dostarczanej przez HTTPS).

Czy cała moja aplikacja internetowa wymaga protokołu HTTPS?

Korzystanie z geolokalizacji nie jest wymagane, aby cała aplikacja była udostępniana przez HTTPS. Tylko strony korzystające z geolokalizacji muszą być wyświetlane w bezpiecznym kontekście. Bezpieczny kontekst to obecnie wszystko, co jest hostowane na najwyższym poziomie przez HTTPS lub lokalnego hosta. Na przykład element iframe, który wskazuje bezpieczne źródło, ale jest hostowany w niezabezpieczonym miejscu (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ądarek wymagają bezpiecznych źródeł.

Czy będzie to miało wpływ na lokalny rozwój?

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

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

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

Błędy spowodowane tym problemem związanym z zabezpieczonym kontekstem zwrócą wartość code z 1, co oznacza błąd 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ć wiadomość, aby dowiedzieć się, jaka była dokładna przyczyna.

Może to być dość wrażliwe, ponieważ może się zmienić w przyszłości, ale mocnym sygnałem, że problem z treścią nie jest zabezpieczony, jest wyszukanie tekstu „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 po prostu sprawdzić źródła strony, ponieważ może ona znajdować się w protokole https, ale może znajdować się w elemencie iframe, który jest hostowany w niezabezpieczonym kontekście.

Korzystanie z geolokalizacji jest dla mnie naprawdę ważne. Co mam zrobić?

Jeśli chcesz korzystać z interfejsu API geolokalizacji w języku HTML5 lub jeśli Twoja witryna już korzysta z tego interfejsu, przenieś strony wywołujące ten interfejs do HTTPS, upewniając się, że będą używane w bezpiecznym kontekście.

Dostępnych jest wiele opcji zastępczych służących do uzyskania lokalizacji użytkownika, których ta zmiana nie ma wpływu, np. interfejsu API geolokalizacji Map Google, GeoIP (np. istnieją inne rozwiązania oparte na danych geograficznych) i kod pocztowy wpisany przez użytkownika. Stanowczo zalecamy jednak przejście na protokół HTTPS, aby zapewnić stały dostęp do geolokalizacji.