La prova di ritiro dell'accesso alla rete privata (PNA) per contesti non sicuri sta per finire. Implementa la richiesta di autorizzazione PNA

Yifan Luo
Yifan Luo

Chrome 124 include la funzionalità Autorizzazione di accesso alla rete privata per rilassarsi con contenuti misti. È in corso una prova del ritiro per i siti che hanno bisogno di più tempo per prepararsi a questa modifica. Tuttavia, questa prova termina con Chrome 126, prevista per il 4 settembre 2024. Questo post spiega la modifica, ulteriori informazioni sul design della funzionalità, su come eseguire la migrazione dei siti web attuali e su come testare l'implementazione.

Cosa cambierà?

Per stabilire connessioni a dispositivi su una rete privata che non hanno nomi univoci a livello globale e che pertanto non possono ottenere certificati TLS, questa funzionalità introduce una nuova opzione per fetch() per dichiarare l'intenzione di uno sviluppatore di parlare con un dispositivo di questo tipo. Ciò include una nuova funzionalità controllata da criteri per limitare l'accesso a questa funzionalità da parte di ogni sito e nuove intestazioni per la risposta preflight del server per fornire metadati aggiuntivi.

Che cos'è l'accesso alla rete privata?

L'accesso alla rete privata (PNA, precedentemente noto come CORS-RFC1918 e brevemente come Accesso alla rete locale) è una funzionalità di sicurezza che limita la capacità dei siti web di inviare richieste ai server su reti private. Ciò contribuisce a proteggere gli utenti e le reti interne da potenziali attacchi come la falsificazione di richieste tra siti (CSRF). Chrome ha implementato gradualmente PNA e la protezione verrà ampliata nelle prossime release.

Perché è necessaria una richiesta di autorizzazione?

Chrome 94 ha introdotto un blocco all'accesso alle reti private da siti web pubblici non sicuri. La prova di ritiro dell'accesso alla rete privata da contesti non sicuri in corso ha rivelato sfide legate alla migrazione dei siti web interessati a HTTPS. Un problema comune è la difficoltà di eseguire la migrazione di dispositivi privati a HTTPS, che genera violazioni dei controlli dei contenuti misti.

Per risolvere questo problema, è stata aggiunta una nuova richiesta di autorizzazione in una prova dell'origine di Chrome 120 e in versione stabile da Chrome 124.

Quando è necessaria una richiesta di autorizzazione?

Abbiamo pianificato di terminare la prova di ritiro dei contesti non sicuri alcuni traguardi raggiunti dopo l'introduzione della funzionalità della richiesta di autorizzazione. Per garantire la compatibilità, devi eseguire la migrazione dei tuoi siti web pubblici a HTTPS. Se non riesci a eseguire la migrazione del tuo server privato a HTTPS, la nuova funzionalità di richiesta di autorizzazione ti consentirà di allentare i controlli dei contenuti misti.

Di seguito è riportato un flusso di lavoro tipico per una richiesta di accesso privato alla rete con richiesta di autorizzazione.

Attiva la richiesta di autorizzazione

Se aggiungi il nuovo attributo targetAddressSpace come opzione di recupero, la richiesta può saltare il controllo dei contenuti misti.

fetch("http://router.local/ping", {
  targetAddressSpace: "private",
});

In conformità con l'accesso alla rete privata: introduzione dei preflight, qualsiasi richiesta di rete privata è preceduta da una richiesta preflight. Questa richiesta preflight includerà una nuova intestazione, Access-Control-Request-Private-Network: true, e la risposta corrispondente dovrà includere l'intestazione Access-Control-Allow-Private-Network: true.

Per soddisfare la nuova richiesta di autorizzazione, i dispositivi devono incorporare due nuove intestazioni di risposta: Private-Network-Access-Name e Private-Network-Access-ID.

  • Private-Network-Access-ID: un valore a 48 bit presentato come 6 byte esadecimali separati da due punti.
  • Private-Network-Access-Name: un nome valido come stringa corrispondente all'espressione regolare ECMAScript /^[a-z0-9_-.]+$/. La lunghezza massima del nome è di 248 unità di codice UTF-8.
Private-Network-Access-Name: "My Smart Toothbrush"
Private-Network-Access-ID: "01:23:45:67:89:0A"

Demo

Puoi guardare la demo all'indirizzo: https://private-network-access-permission-test.glitch.me/.

Per utilizzare il sito web demo devi avviare il tuo server privato personale. Il server privato deve rispondere con l'intestazione HTTP Access-Control-Allow-Private-Network: true, insieme alle intestazioni Private-Network-Access-ID e Private-Network-Access-Name specificate dal server. Se è tutto impostato correttamente, dovrebbe essere visualizzata la seguente richiesta di autorizzazione:

Esci dalla prova di ritiro del contesto non sicuro

Per i siti web per cui è stata registrata la prova di ritiro dell'accesso alla rete privata per contesti non sicuri, questo è il momento in cui devi eseguire la migrazione del tuo sito web con la nostra nuova richiesta di autorizzazione e uscire subito dalla prova.

Dopo aver aggiornato il codice, elimina il token della prova nelle intestazioni HTML, JavaScript o HTTP. Se non ricordi dove hai inserito il token della prova, consulta la sezione Registrati per la prova relativa al ritiro nel post del blog precedente.

È consigliabile inoltre eliminare il token nella pagina relativa alla prova.

Passaggi successivi

La soluzione per le richieste provenienti da fetch() non API è ancora in fase di esplorazione.

Sono state testate diverse soluzioni, ad esempio utilizzando i service worker o creando lo spazio degli indirizzi di destinazione come nuovo criterio di sicurezza dei contenuti. Tuttavia, la forma finale per le richieste provenienti da fetch() non API è ancora in fase di indagine.

In futuro, le richieste da frame secondari potrebbero essere supportate con i criteri di autorizzazione.

In futuro, potremmo decidere di supportare criteri di autorizzazione per ridurre la capacità dei frame secondari.

Feedback per i casi d'uso di reti private

Se ospiti un sito web su una rete privata che richiede richieste da reti pubbliche, il team di Chrome vorrebbe ricevere il tuo feedback. Segnala un problema al Issue Tracker di Chromium (componente: Blink>SecurityFeature>CORS>PrivateNetworkAccess) o al repository GitHub.

Risorse