Geolocation API aus ungesicherten Ursprüngen in Chrome 50 entfernt

Chrome hat die öffentliche Absicht, leistungsstarke Funktionen wie die Standortbestimmung für nicht sichere Quellen einzustellen. Wir hoffen, dass andere Anbieter diesem Beispiel folgen werden.

Ab Chrome 50 wird in Chrome nicht mehr unterstützt, den Standort des Nutzers über die HTML5 Geolocation API von Seiten abzurufen, die über nicht sichere Verbindungen bereitgestellt werden. Das bedeutet, dass die Seite, über die der Geolocation API-Aufruf erfolgt, aus einem sicheren Kontext wie HTTPS bereitgestellt werden muss.

Das ist ein wichtiges Thema, da es sich direkt auf alle Websites auswirkt, für die die Geolocation API verwendet werden muss und die nicht über https ausgeliefert werden. Wir sind jedoch der Meinung, dass diese Änderung für alle Nutzer im Web von Vorteil ist. In diesem Beitrag erfährst du, warum wir das tun und wie du vorgehen solltest.

Wann findet die Änderung statt?

Diese Änderung gilt seit Chrome 50 (20. April 2016, 12:00 Uhr (PST)).

In der Chrome-Entwicklertools-Konsole werden seit Version 44 (veröffentlicht am 21. Juli 2015) Warnungen angezeigt.
Wir haben bereits mehrere öffentliche Ankündigungen veröffentlicht, in denen wir die Gründe für diese Änderung erläutern:

Auch andere Quellen haben darauf hingewiesen: Mobiforge (26. Januar 2016), Wired (17. März 2016) und VentureBeat (13. April 2016).

Warum nimmt Google diese Änderung vor?

Standortdaten sind sensible Daten. Die Anforderung von HTTPS ist erforderlich, um die Daten Ihrer Nutzer zu schützen. Wenn der Standort des Nutzers in einem nicht sicheren Kontext verfügbar ist, können Angreifer im Netzwerk herausfinden, wo sich dieser Nutzer befindet. Das beeinträchtigt die Privatsphäre des Nutzers erheblich.

Wer ist davon betroffen?

Dies betrifft alle Seiten, auf denen derzeit die Geolocation API verwendet wird. Diese Seiten werden über HTTP (nicht sicher) ausgeliefert. Außerdem sind HTTPS-Iframes betroffen, die die Geolocation API verwenden, wenn sie in HTTP-Seiten eingebettet sind. Eine Polyfill-Funktion kann nicht über einen freigegebenen, per HTTPS bereitgestellten Frame verwendet werden.

Benötigt meine gesamte Webanwendung HTTPS?

Es ist nicht erforderlich, dass die gesamte App über HTTPS bereitgestellt wird, um die Standortermittlung zu verwenden. Nur Seiten, die die Standortermittlung verwenden, müssen über einen sicheren Kontext bereitgestellt werden. Ein sicherer Kontext ist derzeit alles, was auf der obersten Ebene über HTTPS oder localhost gehostet wird. Ein Iframe, der auf einen sicheren Ursprung verweist, aber auf einem ungesicherten Ursprung gehostet wird (http ://paul.kinlan.me/), darf beispielsweise nicht die Geolocation API aufrufen.

Wir empfehlen Ihnen dringend, auf HTTPS umzustellen, da leistungsstarke neue und bestehende Browserfunktionen sichere Ursprünge erfordern.

Hat dies Auswirkungen auf die lokale Entwicklung?

Das sollte nicht der Fall sein. In der Spezifikation wurde localhost als „potenziell sicher“ deklariert. In unserem Fall funktionieren Geolokalisierungsanfragen, die auf oberster Ebene über localhost gesendet werden, weiterhin.

Kann ich bei der Laufzeit erkennen, ob die Standortbestimmung blockiert wurde, weil kein sicherer Kontext vorhanden ist?

Ja. Die Geolocation-Spezifikation definiert ein PositionError-Objekt, das an den Fehler-Callback der Geolocation APIs übergeben wird. Das Objekt definiert die Properties code und message.

Bei Fehlern aufgrund dieses Problems mit dem sicheren Kontext wird code = 1 zurückgegeben, was einem Fehler vom Typ „Berechtigung verweigert“ entspricht. Dieser Fehler kann auftreten, wenn ein Nutzer den Zugriff verweigert hat oder das System den Zugriff auf die Standorte des Nutzers verweigert hat. Sie müssen also die Nachricht prüfen, um den genauen Grund zu erfahren.

Das kann sehr empfindlich sein, da sich die Situation in Zukunft ändern könnte. Ein starkes Indiz dafür, dass es sich um ein Problem mit nicht sicheren Inhalten handelt, ist der String „Nur sichere Ursprünge sind zulässig“.

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

Denken Sie daran, dass Sie nicht nur den Ursprung der Seite prüfen können, da Ihre Seite zwar über https, aber in einem iFrame gehostet sein kann, der aus einem unsicheren Kontext stammt.

Ich benötige die Standortbestimmung unbedingt. Was kann ich tun?

Wenn Sie die HTML5 Geolocation API verwenden möchten oder Ihre Website bereits die Geolocation API verwendet, müssen Sie die Seiten, auf denen Geolocation API-Aufrufe erfolgen, zu HTTPS migrieren und dafür sorgen, dass sie in einem sicheren Kontext verwendet werden.

Es gibt eine Reihe von Fallback-Optionen, um den Standort eines Nutzers zu ermitteln, die von dieser Änderung nicht betroffen sind, z. B. die Google Maps Geolocation API, GeoIP (es gibt auch andere geobasierte Lösungen) und eine vom Nutzer eingegebene Postleitzahl. Wir empfehlen jedoch dringend, auf HTTPS umzustellen, um dauerhaften Zugriff auf die Standortermittlung zu ermöglichen.