Chrome hat die öffentliche Absicht, leistungsstarke Funktionen wie die Standortbestimmung für nicht sichere Quellen einzustellen. Wir hoffen, dass andere folgen werden.
Ab Chrome 50 wird das Abrufen des Standorts des Nutzers über die HTML5 Geolocation API für Seiten, die über nicht sichere Verbindungen bereitgestellt werden, nicht mehr unterstützt. Das bedeutet, dass die Seite, von der der Geolocation API-Aufruf erfolgt, über einen sicheren Kontext wie HTTPS bereitgestellt werden muss.
Das Problem ist wichtig, da es sich direkt auf alle Websites auswirkt, die die Geolocation API benötigen und 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 helfen, die Gründe dafür zu verstehen und zu erfahren, wie Sie vorgehen können.
Wann findet die Änderung statt?
Diese Änderung gilt ab Chrome 50 (20. April 2016, 12:00 Uhr PST).
Die Entwicklertools-Konsole von Chrome gibt seit Version 44 (veröffentlicht am 21. Juli 2015) Warnungen aus.
Es gab eine Reihe öffentlicher Ankündigungen, in denen die Gründe für diese Änderung erläutert wurden:
- Absicht, eine Reihe leistungsstarker Funktionen über HTTP einzustellen (Februar 2015)
- Absicht, die Geolocation API über HTTP einzustellen (November 2015)
- Chrome Dev Summit (November 2016)
- Chrome Beta Channel Release-Blog (17. März 2016)
- Chrome Status-Website
Das wurde auch in anderen Quellen hervorgehoben: Mobiforge (26. Januar 2016), Wired (17. März 2016), VentureBeat (13. April 2016).
Warum nimmt Google diese Änderung vor?
Standort ist eine sensible Information. HTTPS ist erforderlich, um die Privatsphäre der Standortdaten Ihrer Nutzer zu schützen. Wenn der Standort des Nutzers über einen nicht sicheren Kontext verfügbar ist, können Angreifer im Netzwerk herausfinden, wo sich der Nutzer befindet. Dies beeinträchtigt die Privatsphäre des Nutzers erheblich.
Wer ist davon betroffen?
Dies betrifft alle Seiten, auf denen derzeit die Geolocation API auf Seiten verwendet wird, die über HTTP (nicht sicher) bereitgestellt werden. Dies betrifft auch HTTPS-Iframes, die die Geolocation API verwenden, wenn sie in HTTP-Seiten eingebettet sind. (Sie können kein Polyfill mit einem freigegebenen HTTPS-bereitgestellten Frame verwenden.)
Benötigt meine gesamte Webanwendung HTTPS?
Es ist nicht erforderlich, dass die gesamte App über HTTPS bereitgestellt wird, um die Geolocation-Funktion zu nutzen. Nur Seiten, auf denen die Geolocation API verwendet wird, 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 unsicheren Ursprung (http ://paul.kinlan.me/) gehostet wird, darf die Geolocation API beispielsweise nicht aufrufen.
Wir empfehlen dringend, auf HTTPS umzustellen, da leistungsstarke neue und vorhandene Browserfunktionen sichere Ursprünge erfordern.
Hat dies Auswirkungen auf die lokale Entwicklung?
Das sollte nicht der Fall sein. „localhost“ wurde in der Spezifikation als „potenziell sicher“ deklariert. In unserem Fall funktionieren Geolocation-Anfragen, die auf der obersten Ebene über „localhost“ bereitgestellt werden, weiterhin.
Kann ich zur Laufzeit erkennen, ob die Standortbestimmung blockiert wurde, weil sie nicht in einem sicheren Kontext erfolgt ist?
Ja. In der Geolocation-Spezifikation wird ein PositionError-Objekt definiert, das an den Fehler-Callback der Geolocation APIs übergeben wird. Das Objekt definiert die Properties code
und message
.
Fehler aufgrund dieses Problems mit dem sicheren Kontext geben einen code
von 1 zurück, was einem „Berechtigung verweigert“-Fehler 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 die Nachricht also aufrufen, um den genauen Grund zu erfahren.
Das kann sich in Zukunft ändern. Ein starkes Signal dafür, dass es sich um ein Problem mit nicht sicheren Inhalten handelt, ist die Suche nach dem String „Only secure origins are allowed“ (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.
}
});
Sie können nicht nur den Ursprung der Seite prüfen, da Ihre Seite zwar über HTTPS bereitgestellt werden kann, aber in einem iFrame eingebettet sein kann, das aus einem unsicheren Kontext gehostet wird.
Ich muss die Standortbestimmung unbedingt verwenden. Was soll ich tun?
Wenn Sie die HTML5 Geolocation API verwenden möchten oder Ihre Website bereits die Geolocation API nutzt, migrieren Sie die Seiten, die Geolocation API-Aufrufe ausführen, zu HTTPS, damit 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 (als Beispiel, es gibt auch andere standortbezogene Lösungen) und eine vom Nutzer eingegebene Postleitzahl. Wir empfehlen jedoch dringend, auf HTTPS umzustellen, um weiterhin Zugriff auf die Geolocation zu haben.