Gli URL contengono più struttura di quanto sembri

Una destinazione include uno schema, un host, una porta opzionale, un percorso, una query e un frammento. Trattarla come una stringa arbitraria rende la convalida incoerente e può introdurre comportamenti non sicuri o sorprendenti.

Analizza il valore completo una volta con un parser URL testato, quindi applica le regole al risultato strutturato.

I frammenti non appartengono alla richiesta del server

Un browser conserva il frammento dopo il segno cancelletto e non lo invia al server di destinazione. Un servizio di reindirizzamento può preservarlo per la navigazione del client, ma una piattaforma può rimuovere intenzionalmente i frammenti quando il contratto li considera come stato dell'interfaccia utente locale.

Qualunque politica venga scelta dovrebbe essere visibile e testata. La codifica silenziosa dell'hash in un percorso modifica la destinazione ed è un bug di normalizzazione comune.

Le destinazioni private necessitano di cure speciali

Gli host di loopback, privati, locali al collegamento e interni possono diventare pericolosi quando una piattaforma recupera anche anteprime o esegue controlli di integrità. Rifiutarli prima dell'archiviazione semplifica il limite di sicurezza.

La risoluzione del nome host richiede controlli aggiuntivi in un fetcher isolato perché un nome host dall'aspetto pubblico può successivamente risolversi in un indirizzo privato. La validazione delle stringhe da sola non è una difesa SSRF completa.

API per sviluppatori · Accesso attuale e limiti