Chrome ma publiczny zamiar wycofać zaawansowane funkcje, takie jak geolokalizacja w niebezpiecznych źródłach, i mamy nadzieję, że inne przeglądarki pójdą w jego ślady.
Począwszy od wersji 50 Chrome nie obsługuje już uzyskiwania lokalizacji użytkownika za pomocą interfejsu HTML5 Geolocation API z stron dostarczanych przez niezabezpieczone połączenia. Oznacza to, że strona, która wywołuje Geolocation API, musi być wyświetlana w bezpiecznym kontekście, takim jak HTTPS.
Jest to ważne zagadnienie, ponieważ będzie ono bezpośrednio wpływać na wszystkie witryny, które wymagają użycia interfejsu API geolokalizacji i nie są dostępne przez https. Uważamy jednak, że ta zmiana przyniesie korzyści wszystkim użytkownikom internetu. Ten post powinien pomóc Ci zrozumieć, dlaczego tak się stało i co należy zrobić.
Kiedy nastąpi zmiana?
Ta zmiana zacznie obowiązywać w Chrome 50 (20 kwietnia 2016 r., godz. 12:00 czasu PST).
Konsola Narzędzi programistycznych Chrome wyświetla ostrzeżenia od wersji 44 (wydana 21 lipca 2015 r.).
Wprowadziliśmy już kilka publicznych ogłoszeń, które zawierają uzasadnienie (oraz dyskusję) dotyczącą przyczyn wprowadzenia tej zmiany:
- Zamierzamy wycofać z obsługi pewien zestaw zaawansowanych funkcji HTTP (luty 2015 r.)
- Zamierzamy wycofać Geolocation API przez HTTP (listopad 2015 r.)
- Chrome Dev Summit (listopad 2016 r.)
- Blog poświęcony wersji Chrome Beta Channel (17 marca 2016 r.)
- Witryna Stan Chrome
W innych źródłach również pojawiły się informacje na ten temat: Mobiforge (26 stycznia 2016 r.), Wired (17 marca 2016 r.), VentureBeat (13 kwietnia 2016 r.).
Dlaczego wprowadzamy tę zmianę?
Lokalizacja jest danymi wrażliwymi. Wymaganie korzystania z protokołu HTTPS jest konieczne, aby chronić prywatność danych o lokalizacji użytkowników. Jeśli lokalizacja użytkownika jest dostępna z niebezpiecznego kontekstu, atakujący w sieci będą mogli się dowiedzieć, gdzie się znajduje. To poważnie narusza prywatność użytkownika.
Kogo to dotyczy?
Dotyczy to każdej strony, która obecnie korzysta z interfejsu Geolocation API na stronach wyświetlanych przez protokół HTTP (niezabezpieczony). Dotyczy to też ramek iframe HTTPS, które korzystają z interfejsu Geolocation API, jeśli są one osadzone na stronach HTTP. (nie można polyfillować za pomocą udostępnionego ramki HTTPS).
Czy cała moja aplikacja internetowa musi działać w trybie HTTPS?
Aby korzystać z lokalizacji geograficznej, nie musisz wyświetlać całej aplikacji przez HTTPS. Tylko strony korzystające z lokalizacji geograficznej mogą być wyświetlane w ramach bezpiecznego kontekstu. Bezpieczny kontekst to obecnie wszystko hostowane na najwyższym poziomie w HTTPS lub localhost. Na przykład element iframe, który wskazuje bezpieczne pochodzenie, ale jest hostowany na niezabezpieczonym źródle (http ://paul.kinlan.me/), nie może wywołać interfejsu Geolocation API.
Zdecydowanie zalecamy przejście na HTTPS, ponieważ nowe i dotychczasowe zaawansowane funkcje przeglądarki wymagają bezpiecznych źródeł.
Czy ma to wpływ na lokalny proces programowania?
Nie powinno tak być. W specyfikacji localhost został zadeklarowany jako „potencjalnie bezpieczny”, a w naszym przypadku żądania geolokalizacji wysyłane na najwyższym poziomie za pomocą localhost nadal będą działać.
Czy mogę wykryć w czasie działania, czy geolokalizacja została zablokowana, ponieważ nie była w bezpiecznym kontekście
Tak. Specyfikacja geolokalizacji definiuje obiekt PositionError, który jest przekazywany do wywołania zwrotnego po niepowodzeniu interfejsów API geolokalizacji. Obiekt definiuje właściwości code
i message
.
Błędy spowodowane tym problemem z bezpiecznym kontekstem zwracają wartość code
1, która oznacza „Błąd braku 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ę, jaki był dokładny powód.
Może to być dość niestabilne, ponieważ w przyszłości może się to zmienić, ale wyraźnym sygnałem, że problem dotyczył treści niezabezpieczonych, jest ciąg znaków „Tylko bezpieczne źródła są dozwolone”.
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ć pochodzenia strony, ponieważ może ona być na protokole https, ale w elemencie iframe, który jest hostowany w kontekście niezabezpieczonym.
Muszę używać geolokalizacji. Co mam zrobić?
Jeśli chcesz używać interfejsu API geolokalizacji HTML5 lub jeśli Twoja witryna już z niego korzysta, przenieś strony wywołujące interfejs API geolokalizacji na HTTPS, aby mieć pewność, że są one używane w bezpiecznym kontekście.
Dostępnych jest kilka opcji zapasowych umożliwiających ustalenie lokalizacji użytkownika, na które ta zmiana nie ma wpływu, np. interfejs API do geolokalizacji w Mapach Google, GeoIP (istnieją też inne rozwiązania oparte na danych geograficznych) oraz kod pocztowy wprowadzony przez użytkownika. Jednak zdecydowanie zalecamy przejście na HTTPS, ponieważ to najlepszy sposób na zapewnienie ciągłego dostępu do geolokalizacji.