James Kettle fornisce una buona scrittura su Pratici attacchi HTTP Host Header . Sono riassunti qui con una descrizione della strategia di Django ALLOWED_HOSTS.
Vulnerabilità
Vettore di reimpostazione della password
La vulnerabilità della posta elettronica di reimpostazione della password a cui la documentazione allude è il risultato di Django e / o delle sue applicazioni che utilizzano e si fidano del valore dell'host HTTP, fornito dal client (sembra una cattiva idea?). Il valore dell'host viene copiato direttamente nelle e-mail di reimpostazione della password, fornendo un utile vettore di iniezione.
Avvelenamento da cache
La variazione dell'avvelenamento della cache si basa su questo comportamento e anche sulle differenze nel modo in cui l'intestazione HOST viene gestita dai server e dalle soluzioni di memorizzazione nella cache.
HTTP_SERVER vs HTTP ['HOST']
Come descrive Kettle, a causa di RFC2616, è possibile con server compatibili utilizzare una discrepanza tra HTTP_SERVER e HTTP ['HOST'] per fornire stringhe host arbitrarie.
Analisi host
Sfruttando diversi formati e utilizzando caratteri speciali, un utente malintenzionato può causare l'interpretazione di un host "consentito" malevolo in diversi contesti. Questo è di nuovo un errore nell'applicazione che si è fidata della stringa Host.
Soluzione Django
Poiché le note di rilascio fornite da Riassumendo Catskul, la soluzione Django consiste nel fare in modo che l'utente inserisca gli host consentiti direttamente nel codice del progetto. Proibendo qualsiasi altro host che non corrisponde a ALLOWED_HOSTS
, il vettore di iniezione viene eliminato (un approccio "elenco bianco").
Questa è una soluzione goffo, come sottolinea James, ma è anche piuttosto efficace.
Tieni presente
È possibile utilizzare i caratteri jolly nelle impostazioni di un progetto, nel qual caso questa funzione non aiuta a proteggere nulla.
Uno sviluppatore di applicazioni sicuro eviterà di utilizzare il valore dell'host HTTP in modo significativo.
Riferimenti
Carlos Bueno, Cache Poisoning (2008)