API Geolocation rimossa da origini non protette in Chrome 50

Chrome ha l'intenzione pubblica di ritirare funzionalità potenti come la geolocalizzazione su origini non sicure e ci auguriamo che altri lo seguano.

A partire da Chrome 50, Chrome non supporta più l'ottenimento della posizione dell'utente utilizzando l'API Geolocation HTML5 da pagine pubblicate tramite connessioni non sicure. Ciò significa che la pagina che effettua la chiamata all'API Geolocalizzazione deve essere pubblicata da un contesto sicuro, ad esempio HTTPS.

Si tratta di un problema importante perché influirà direttamente su qualsiasi sito che richiede l'uso dell'API di geolocalizzazione e non viene pubblicato tramite https, ma riteniamo che si tratti di una modifica vantaggiosa per tutti gli utenti del web. Questo post dovrebbe aiutarti a comprendere il ragionamento e come procedere.

Quando avverrà questa modifica?

Questa modifica è valida 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).
Sono stati pubblicati diversi annunci pubblici che descrivono il motivo (e la discussione) per cui stiamo apportando questa modifica:

Diverse altre fonti hanno evidenziato questo aspetto: Mobiforge (26 gennaio 2016), Wired (17 marzo 2016), VentureBeat (13 aprile 2016).

Perché stiamo introducendo questo cambiamento?

La posizione è un dato sensibile. È necessario richiedere HTTPS per proteggere la privacy degli utenti. Se la posizione dell'utente è disponibile da un contesto non sicuro, gli utenti malintenzionati sulla rete potranno sapere dove si trova l'utente. Ciò compromette seriamente la privacy dell'utente.

Quali utenti sono coinvolti?

Questo riguarda qualsiasi pagina che al momento utilizza l'API Geolocalizzazione da pagine pubblicate tramite HTTP (non sicure). Inoltre, influisce sugli iframe HTTPS che utilizzano l'API Geolocalizzazione se sono incorporati in pagine HTTP. Non potrai eseguire il polyfill utilizzando un frame condiviso fornito tramite HTTPS.

L'intera mia app web deve essere 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 elemento ospitato a livello superiore su HTTPS o localhost. Ad esempio, un iframe che rimanda a un'origine sicura, ma è ospitato su un'origine non sicura (http ://paul.kinlan.me/) non può chiamare l'API Geolocation.

Ti consigliamo vivamente di eseguire la migrazione a HTTPS, in quanto le nuove e potenti funzionalità dei browser richiedono origini sicure.

Questa modifica ha effetti sullo sviluppo locale?

Non dovrebbe, localhost è stato dichiarato "potenzialmente sicuro" nella specifica e nel nostro caso le richieste di geolocalizzazione inviate a livello superiore tramite localhost continueranno a funzionare.

Posso rilevare in fase di esecuzione 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, ovvero un "errore di autorizzazione negata". Questo errore può verificarsi quando un utente ha negato l'accesso o il sistema ha negato l'accesso alle sue località. Ciò significa che dovrai controllare il messaggio per vedere qual è il motivo esatto.

Questo può essere piuttosto fragile in quanto potrebbe cambiare in futuro, ma un indicatore importante che si tratta di un problema relativo ai 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 controllare l'origine della pagina perché la pagina potrebbe essere su https, ma all'interno di un iframe ospitato da un contesto non sicuro.

Devo assolutamente utilizzare la geolocalizzazione. Che cosa devo fare?

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

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