API Geolocation rimossa da origini non protette in Chrome 50

Paul Kinlan
Paul Kinlan

Chrome ha l'intento pubblico di ritirare potenti funzionalità come la geolocalizzazione su origini non sicure e ci auguriamo che anche altre persone lo seguiranno.

A partire da Chrome 50, Chrome non supporta più il recupero della posizione dell'utente tramite l'API HTML5 Geolocation dalle pagine fornite da connessioni non sicure. Ciò significa che la pagina che sta effettuando la chiamata all'API Geolocation deve essere gestita da un contesto sicuro come HTTPS.

Si tratta di un problema importante, in quanto avrà un impatto diretto su qualsiasi sito che richieda l'uso dell'API di geolocalizzazione e non sia pubblicato su https, ma è un cambiamento che riteniamo vantaggioso per tutti gli utenti del web. Questo post dovrebbe aiutarti a comprendere il ragionamento e come procedere.

Quando avverrà questa modifica?

Questa modifica è in vigore a partire da Chrome 50 (12:00 PST del 20 aprile 2016).

La console degli strumenti per sviluppatori di Chrome fornisce avvisi dalla versione 44 (rilasciata il 21 luglio 2015).
Ci sono stati diversi annunci pubblici che descrivono la motivazione (e la discussione) del motivo per cui stiamo apportando questo cambiamento:

Numerose altre fonti hanno evidenziato questa situazione: Mobiforge (26 gennaio 2016), Wired (17 marzo 2016), VentureBeat (13 aprile 2016).

Perché stiamo introducendo questo cambiamento?

La posizione è un dato sensibile. La richiesta di HTTPS è necessaria per proteggere la privacy dei dati sulla posizione dei tuoi utenti. Se la posizione dell'utente è disponibile da un contesto non sicuro, gli utenti malintenzionati sulla rete potranno sapere dove si trova l'utente. Questo compromette seriamente la privacy dell'utente.

Quali utenti sono coinvolti?

Questo problema interessa tutte le pagine che attualmente utilizzano l'API Geolocation dalle pagine pubblicate tramite HTTP (non sicure). Interessa anche gli iframe HTTPS che usano l'API Geolocation se sono incorporati in pagine HTTP. Non potrai eseguire il polyfill utilizzando un frame pubblicato con HTTPS condiviso.

L'intera app web richiede il protocollo HTTPS?

Per utilizzare la geolocalizzazione, non è necessario che l'intera app venga pubblicata tramite HTTPS. Solo le pagine che utilizzano la geolocalizzazione devono essere pubblicate in un contesto sicuro. Al momento, un contesto sicuro è qualsiasi cosa ospitata al livello più alto su HTTPS o localhost. Ad esempio, un iframe che punta a un'origine sicura ma che è ospitato su un'origine non protetta (http ://paul.kinlan.me/) non può chiamare l'API di geolocalizzazione.

Ti consigliamo vivamente di eseguire la migrazione a HTTPS poiché le potenti funzionalità del browser nuove ed esistenti richiedono origini sicure.

Questo influisce sullo sviluppo locale?

No, perché localhost è stato dichiarato "potenzialmente sicuro" nelle specifiche e, nel nostro caso, le richieste di geolocalizzazione inviate al livello superiore rispetto a localhost continueranno a funzionare.

Posso rilevare in fase di runtime se la geolocalizzazione è stata bloccata perché non si trova in un contesto sicuro

Sì. La specifica di geolocalizzazione definisce un oggetto PositionError che viene passato al callback di errore delle API Geolocation. L'oggetto definisce le proprietà code e message.

Gli errori dovuti a questo problema di contesto sicuro restituiranno un valore code pari a 1, che rappresenta un "errore di autorizzazione negata". Puoi visualizzare questo errore quando un utente nega l'accesso o quando il sistema nega l'accesso alle posizioni dell'utente. Ciò significa che dovrai controllare il messaggio per vedere qual è il motivo esatto.

Questo può essere piuttosto difficile perché potrebbe cambiare in futuro, ma un segnale forte del fatto che si trattava di un problema di contenuti non sicuri è cercare la stringa "Sono consentite solo origini sicure".

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

Ricorda che non puoi semplicemente verificare l'origine della pagina, perché questa potrebbe essere su https, ma all'interno di un iframe ospitato da un contesto non sicuro.

Devo utilizzare la geolocalizzazione; cosa devo fare?

Se vuoi utilizzare l'API HTML5 Geolocation o se il tuo sito utilizza già l'API Geolocation, esegui la migrazione delle pagine che effettuano chiamate all'API Geolocation su HTTPS, assicurandoti che vengano utilizzate in un contesto sicuro.

Esistono diverse opzioni di riserva disponibili per ottenere la posizione di un utente che non sono interessate da questa modifica, come l'API Google Maps Geolocation, GeoIP (ad esempio, esistono altre soluzioni basate su dati geografici) e il codice postale inserito dall'utente. Tuttavia, consigliamo vivamente che il percorso migliore per garantire un accesso costante alla geolocalizzazione sia il passaggio a HTTPS.