API Geolocation rimossa da origini non protette in Chrome 50

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

A partire da Chrome 50, non è più possibile ottenere la posizione dell'utente utilizzando l'API HTML5 Geolocation da pagine pubblicate da connessioni non sicure. Ciò significa che la pagina che esegue la chiamata all'API Geolocation deve essere gestita da un contesto sicuro come HTTPS.

È un problema importante perché avrà un impatto diretto su qualsiasi sito che richiede l'utilizzo dell'API di geolocalizzazione e non viene pubblicato tramite https, ma crediamo sia un cambiamento che riteniamo sia vantaggioso per tutti gli utenti del Web. Questo post dovrebbe aiutarti a capire il ragionamento e come procedere.

Quando avverrà questa modifica?

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

La console Strumenti per sviluppatori di Chrome fornisce avvisi dalla versione 44 (rilasciata il 21 luglio 2015).
Ci sono stati vari annunci pubblici che descrivono la motivazione (e la discussione) del cambiamento che ha portato alla modifica:

Ci sono state molte altre fonti che hanno messo in evidenza questo fatto: Mobiforge (26 gennaio 2016), Wired (17 marzo 2016), VentureBeat (13 aprile 2016).

Perché stiamo introducendo questo cambiamento?

La posizione contiene dati sensibili. La richiesta di HTTPS è necessaria per proteggere la privacy dei dati sulla posizione degli utenti. Se la posizione dell'utente è disponibile in un contesto non sicuro, gli utenti malintenzionati sulla rete saranno in grado di sapere dove si trova l'utente, con ripercussioni gravi sulla sua privacy.

Quali utenti sono coinvolti?

Il problema riguarda qualsiasi pagina che attualmente utilizza l'API Geolocation da pagine pubblicate tramite HTTP (non sicuro). Influisce anche sugli iframe HTTPS che utilizzano l'API Geolocation se sono incorporati in pagine HTTP. (non potrai eseguire il polyfill utilizzando un frame condiviso tramite HTTPS).

La mia intera app web richiede il protocollo HTTPS?

Non è obbligatorio che l'intera app venga pubblicata tramite HTTPS per poter utilizzare la geolocalizzazione. Solo le pagine che utilizzano la geolocalizzazione devono essere pubblicate in un contesto sicuro. Al momento, per contesto sicuro si intende 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 protetta (http ://paul.kinlan.me/) non potrà 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.

Tutto questo influisce sullo sviluppo locale?

No, localhost è stato dichiarato come "potenzialmente sicuro" nelle specifiche e, nel nostro caso, le richieste di geolocalizzazione fornite al livello superiore su 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 trasmesso al callback di errore delle API di geolocalizzazione. L'oggetto definisce le proprietà code e message.

Gli errori dovuti a questo problema di contesto sicuro restituiranno un valore code di 1, che corrisponde a un "Errore di autorizzazione negata". Puoi ricevere questo errore quando un utente ha negato l'accesso o il sistema ha negato l'accesso alle posizioni dell'utente. Ciò significa che dovrai controllare il messaggio per verificare il motivo esatto.

Potrebbe essere piuttosto difficile perché potrebbe cambiare in futuro, ma un forte segnale che si trattava di un problema di contenuti non sicuri è la ricerca della 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 controllare semplicemente l'origine della pagina, perché quest'ultima potrebbe essere su https, ma all'interno di un iframe ospitato da un contesto non sicuro.

Ho davvero bisogno di utilizzare la geolocalizzazione; che cosa devo fare?

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

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