PHP mail () Prevenzione dell'iniezione dell'intestazione

9

Questo sito spiega bene il problema. Essenzialmente, quasi tutti gli esempi di php mail () forniti sono vulnerabili agli attacchi di header header. Il sito di riferimento fornisce una soluzione per l'igiene delle regex ma non ne sono soddisfatto. Esiste una funzione di risanamento dell'intestazione integrata? Che cosa si dovrebbe fare per proteggere davvero contro questo tipo di attacco?

    
posta colithium 11.12.2010 - 17:37
fonte

3 risposte

5

Di fatto PHP include una funzione per verificare la validità di un indirizzo fornito.

link

link

Es: filter_var ($ _ POST ['from'], FILTER_VALIDATE_EMAIL)? send (): die ("Mi hai ucciso. D:");

    
risposta data 12.12.2010 - 16:32
fonte
2

Ecco come pera lo fa in il loro pacchetto Mail:

function _sanitizeHeaders(&$headers)
{
    foreach ($headers as $key => $value) {
        $headers[$key] =
            preg_replace('=((<CR>|<LF>|0x0A/%0A|0x0D/%0D|\n|\r)\S).*=i',
                         null, $value);
    }
}

Ovviamente, affinché questo metodo sia adattato per funzionare con la funzione di posta () integrata, è necessario eseguire alcuni lavori. Invece di lavorare con gli array associativi per le intestazioni, la funzione mail () accetta solo una stringa. Quindi tu (l'utente di mail ()) dovrebbe sterilizzare ogni pezzo dell'intestazione simile a quello sopra come si costruisce la stringa delle intestazioni.

Mi piacerebbe sentire nei commenti se questo effettivamente copre ogni minaccia di iniezione (da quelli che hanno più esperienza con problemi come questo).

    
risposta data 11.12.2010 - 18:03
fonte
1

Chiaramente non puoi mai fidarti dei dati degli utenti. La soluzione non consiste nel fare affidamento su sanitizzazione conveniente nella funzione di intestazione, ma non fidarsi dei dati DIRTY degli utenti.

Non importa quando e come, ma se i tuoi dati provengono da fuori devi pulirlo. In questo esempio, un semplice / potrebbe sfuggire al carattere / n e l'attacco non funzionerebbe.

    
risposta data 11.12.2010 - 17:47
fonte

Leggi altre domande sui tag