Italiano

Strumenti per sviluppatori · URL codificatore e decodificatore

Codifica un reindirizzamento URL all'interno di un parametro di query senza interromperlo

· Come funziona

codifica dell'URL parametri-query sicurezza oauth

Un URL completo codificato come valore di un singolo parametro di query, preservando la struttura tramite la codifica percentuale
Illustrazione vettoriale originale ToolAcre

Nidificare un URL all'interno di un altro è il luogo più comune in cui la codifica percentuale va storta. Questo post mostra perché gli elementi interni di URL ?, & e = devono essere codificati, come farlo e come controllare il risultato.

Il collegamento di ritorno che ha perso metà dei suoi parametri: un URL interno e inghiottito dalla stringa di query esterna

Il collegamento di ritorno che ha perso metà dei suoi parametri è un modello di debug che ogni sviluppatore incontra. Un utente accede, l'applicazione tenta di reindirizzare a ?next=https://example.com/page?id=1&user=alice, e l'utente finisce a example.com/page?id=1. La e commerciale nella parte interna URL è stata analizzata come separatore tra i parametri di query esterni. Due URL con delimitatori diversi indicano che quello interno deve essere codificato.

Quando si annida un URL all'interno di un altro come parametro di query, quell'indirizzo interno diventa dati opachi per il livello esterno. Il punto interrogativo, la e commerciale e il segno di uguale non devono essere leggibili come delimitatori strutturali. La codifica percentuale li trasforma: ? diventa %3F, e diventa %26, = diventa %3D. Il parser esterno tratta quindi la stringa codificata come un valore di parametro.

Due URL, due serie di delimitatori: perché il URL interno è solo un valore per quello esterno

encodeURIComponent sull'intero URL interno produce una protezione completa: encodeURIComponent("https://example.com/a?b=1&c=2") restituisce "https%3A%2F%2Fexample.com%2Fa%3Fb%3D1%26c%3D2 Ogni carattere strutturale diventa %XX notazione in modo che il parser esterno non possa interpretare erroneamente i delimitatori nidificati. Un approccio concorrente come encodeURI lascia barre e punti interrogativi intatti, reintroducendo l'ambiguità quando quel risultato diventa un valore di query.

Il server decodifica esattamente una volta. Dopo aver estratto il parametro successivo, una singola chiamata decodeURIComponent ripristina il URL interno nella sua forma originale. L'analisi del risultato come una nuova stringa di query consente quindi di visualizzare la struttura dei parametri corretta. La doppia decodifica è un rischio quando lo stesso valore passa attraverso più livelli; %26 diventa & dopo una decodifica e rimane & dopo la seconda.

encodeURIComponent nell'intero URL interno: cosa viene codificato, inclusi:, / e ?

La regola di base è semplice: qualsiasi carattere che abbia significato nella sintassi URL, incluso : / ? = & #, deve essere codificato in percentuale quando appare nel valore di un parametro di query. Ciò garantisce che il parser esterno veda solo la struttura dei parametri prevista e non eventuali delimitatori accidentali nascosti all'interno del valore che stai passando. Utilizza encodeURIComponent per gestire questa codifica in modo completo e affidabile.

Prova questa codifica nel codificatore e decodificatore URL: incolla il URL interno, codificalo in modalità valore, osserva l'output %XX. Utilizzare la modalità decoder per verificare esattamente le corrispondenze di andata e ritorno. Questo strumento dimostra la codifica end-to-end in modo da poter copiare i risultati direttamente nel codice dell'applicazione in tutta sicurezza.

Esempio funzionante: creazione corretta di ?next=https://example.com/a?b=1&c=2: la stringa codificata e la decodifica sul lato server

Un limite di sicurezza critico si trova accanto alla codifica. Il server deve verificare che la destinazione decodificata sia effettivamente sicura per il reindirizzamento. La codifica percentuale rende la struttura URL non ambigua; non rende sicuri gli URL arbitrari. Le vulnerabilità di reindirizzamento aperto si verificano quando le applicazioni seguono ciecamente gli URL forniti dall'utente. La convalida richiede una lista consentita esplicita, la verifica del dominio o la conferma dell'utente.

La codifica risolve il problema di analisi; la convalida risolve il problema di sicurezza. Queste sono preoccupazioni separate a diversi livelli. Il codificatore e decodificatore URL dimostra la codifica corretta. Un server deve aggiungere la convalida: confrontare un elenco, verificare il dominio o chiedere conferma. Senza convalida, un reindirizzamento correttamente codificato a qualsiasi dominio rimane sfruttabile.

Rischio di reindirizzamento aperto: perché il server deve convalidare la destinazione decodificata, non solo decodificarla

Qui si accumulano errori comuni. Gli sviluppatori a volte codificano solo la parte della query, lasciando intatte le barre, il che interrompe la struttura. Altri codificano l'intero parametro costruito incluso ?next=, creando una doppia codifica. Alcuni controllano la validità analizzando senza decodificare, interpretando erroneamente la struttura codificata. Costruire con encodeURIComponent garantisce coerenza e correttezza in ogni caso.

Un altro errore comune è fidarsi del browser per correggere automaticamente un parametro non valido. Gli URL sono dati e devono essere trattati esattamente come dati. encodeURIComponent è lo strumento standard per questo lavoro. Il codificatore e decodificatore URL mantiene questo processo locale in modo da poter verificare i byte esatti prima della spedizione alla produzione.

Errori comuni: codificare solo la parte della query o confidare nel browser per risolverla

I parametri OAuth reindirizzamento_uri seguono esattamente lo stesso schema. Il server di autorizzazione passa il controllo a un client a un indirizzo noto, spesso un URL completo con più parametri. Codificarlo come valore singolo garantisce che i parametri sopravvivano al trasporto e che il client li decodifichi una volta prima dell'uso. La codifica errata nei flussi OAuth fa sì che i token e i parametri di callback svaniscano durante la trasmissione.

I parametri di stato in OAuth utilizzano la codifica combinata con le firme crittografiche per la protezione CSRF. Gli identificatori di frammento rimangono sul lato client e non viaggiano mai verso il server. I token al portatore non devono mai essere inseriti negli URL di reindirizzamento indipendentemente dalla codifica, poiché gli URL vengono visualizzati nei log, nella cronologia del browser e nelle intestazioni dei referrer.

Cosa non copre: parametri di stato OAuth e progettazione della protezione CSRF

Strategia di test: costruisci il tuo URL interno con parametri reali, codificalo come valore esterno, decodificalo nel codice ricevente. Verificare che il risultato decodificato sia identico byte per byte all'originale. Utilizza il codificatore e decodificatore URL prima della distribuzione in produzione. Esaminare il traffico di rete e i registri per confermare il corretto arrivo e l'assenza di troncamenti o alterazioni dei dati codificati.

Un errore di battitura come %2e invece di %2E potrebbe decodificare correttamente ma non superare i controlli di andata e ritorno nei sistemi secondari che prevedono coerenza. Le discrepanze di codifica tra librerie su piattaforme diverse sono rare ma possibili; testare l'intero viaggio di andata e ritorno li cattura prima che causino problemi di produzione e reclami da parte dei clienti.

Conclusione: tratta il URL interno come dati: come la modalità a valore singolo del codificatore e decodificatore URL lo codifica completamente e il suo decodificatore conferma il viaggio di andata e ritorno

Il limite di codifica è chiaro: encodeURIComponent tratta il tuo input come dati opachi ed evita tutti i caratteri tranne la punteggiatura non riservata, rendendolo sicuro da annidare in qualsiasi livello URL. Il confine di convalida è separato: dopo la decodifica, verificare che la destinazione sia dove l'utente intendeva andare. Utilizza il codificatore e decodificatore URL per vedere la codifica dimostrata dall'inizio alla fine.

Tratta il URL interno come dati dall'inizio. Codificalo come un singolo valore di query, decodificalo esattamente una volta ricevuto, quindi applica la convalida prima del reindirizzamento. Il codificatore e decodificatore URL mostra la codifica percentuale di qualsiasi URL completo come un singolo valore di query e verifica i viaggi di andata e ritorno localmente. Sia la codifica che la validazione sono essenziali; questo strumento gestisce correttamente la codifica.