Geolocation API aus ungesicherten Ursprüngen in Chrome 50 entfernt

Chrome hat die öffentliche Absicht, leistungsstarke Funktionen wie die Standortbestimmung auf nicht sicheren Ursprüngen einzustellen und wir hoffen, dass andere folgen werden.

Ab Chrome 50 unterstützt Chrome das Abrufen des Nutzerstandorts nicht mehr mithilfe der HTML5 Geolocation API von Seiten, die über nicht sichere Verbindungen bereitgestellt werden. Das bedeutet, dass die Seite, die den Geolocation API-Aufruf sendet, aus einem sicheren Kontext wie HTTPS bereitgestellt werden muss.

Dies ist ein wichtiges Problem, da es direkte Auswirkungen auf Websites hat, für die die Geolocation API verwendet werden muss und die nicht über HTTPS bereitgestellt werden. Wir sind jedoch der Meinung, dass diese Änderung für alle Nutzer im Web von Vorteil ist. Dieser Beitrag soll Ihnen die Begründung und das weitere Vorgehen erläutern.

Wann findet die Änderung statt?

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

In der Entwicklertools-Konsole von Chrome werden seit Version 44 (veröffentlicht am 21. Juli 2015) Warnungen angezeigt.
Es gab eine Reihe von öffentlichen Ankündigungen, in denen die Begründung (und Diskussionen) für diese Änderung beschrieben wurde:

Eine Reihe anderer Quellen hebt dies hervor: Mobiforge (26. Januar 2016), Wired (17. März 2016), VentureBeat (13. April 2016).

Weshalb wird diese Änderung vorgenommen?

Der Standort ist sensible Daten! Die Verwendung von HTTPS ist erforderlich, um den Datenschutz für die Standortdaten Ihrer Nutzer zu gewährleisten. Wenn der Standort des Nutzers in einem unsicheren Kontext verfügbar ist, können Angreifer im Netzwerk sehen, wo sich dieser Nutzer befindet. Dadurch wird die Privatsphäre der Nutzer ernsthaft gefährdet.

Wer ist davon betroffen?

Das betrifft alle Seiten, auf denen derzeit die Geolocation API für Seiten verwendet wird, die über HTTP (nicht sicher) bereitgestellt werden. Sie betrifft auch HTTPS-iFrames, die die Geolocation API verwenden, wenn sie in HTTP-Seiten eingebettet sind. Polyfill ist nicht möglich, wenn du einen gemeinsamen, über HTTPS übermittelten Frame verwendest.

Benötigt meine gesamte Webanwendung HTTPS?

Es ist nicht erforderlich, dass die gesamte App über HTTPS bereitgestellt wird, um die Standortbestimmung nutzen zu können. Nur Seiten, die die Standortbestimmung nutzen, müssen in einem sicheren Kontext bereitgestellt werden. Ein sicherer Kontext ist derzeit alles, was auf oberster Ebene auf HTTPS oder localhost gehostet wird. Beispielsweise darf ein iFrame, der auf einen sicheren Ursprung verweist, aber auf einem ungesicherten Ursprung gehostet wird (http ://paul.kinlan.me/), nicht die API für die Standortbestimmung aufrufen.

Wir empfehlen Ihnen dringend, zu HTTPS zu migrieren, da leistungsstarke neue und vorhandene Browserfunktionen sichere Ursprünge erfordern.

Hat das Auswirkungen auf die lokale Entwicklung?

Dies sollte nicht der Fall sein, da „localhost“ in der Spezifikation als „potenziell sicher“ deklariert wurde. In unserem Fall funktionieren Anfragen zur Standortbestimmung auf oberster Ebene über „localhost“ weiterhin.

Kann ich zur Laufzeit feststellen, ob die Standortbestimmung blockiert wurde, weil sie sich nicht in einem sicheren Kontext befindet

Ja. In der Spezifikation für die Standortbestimmung wird ein PositionError-Objekt definiert, das an den Fehler-Callback der Geolocation APIs übergeben wird. Das Objekt definiert die Attribute code und message.

Bei Fehlern aufgrund dieses Problems mit sicherem Kontext wird für code der Wert 1 zurückgegeben. Dies ist ein Fehler vom Typ „Berechtigung verweigert“. Dieser Fehler kann auftreten, wenn ein Nutzer den Zugriff verweigert oder das System den Zugriff auf die Standorte des Nutzers verweigert hat. Dies bedeutet, dass Sie in der Nachricht nach dem genauen Grund suchen müssen.

Dies kann sich in Zukunft ändern, aber ein deutlicher Hinweis darauf, dass es sich um ein Problem mit nicht sicheren Inhalten handelt, ist, nach dem String "Nur sichere Ursprünge sind zulässig" zu suchen.

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

Sie können nicht einfach den Ursprung der Seite prüfen, weil sich Ihre Seite möglicherweise auf HTTPS befindet, aber in einem iFrame, der in einem unsicheren Kontext gehostet wird.

Ich muss die Standortbestimmung verwenden. Was muss ich tun?

Wenn Sie die HTML5 Geolocation API verwenden möchten oder auf Ihrer Website bereits die Geolocation API verwendet wird, migrieren Sie die Seiten mit Geolocation API-Aufrufen zu HTTPS und achten Sie darauf, dass sie in einem sicheren Kontext verwendet werden.

Es gibt eine Reihe von Fallback-Optionen, mit denen der Standort eines Nutzers abgerufen werden kann, die nicht von dieser Änderung betroffen sind, z. B. die Google Maps Geolocation API, GeoIP (zum Beispiel gibt es andere geografisch ausgerichtete Lösungen) und eine vom Nutzer eingegebene Postleitzahl. Wir empfehlen jedoch dringend, zu HTTPS zu wechseln, um einen dauerhaften Zugriff auf die Standortbestimmung zu gewährleisten.