2013-06-14 4 views
9

Ho un modulo in cui accetto il nome, l'e-mail e il messaggio di un utente. Faccio la convalida per nome, e-mail e messaggio e lo mando semplicemente usando la funzione mail().Devo disinfettare i dati immessi dall'utente prima di inviarli tramite e-mail

Se inserissi $name, $email e $message in un database, vorrei evitare questi dati per l'iniezione SQL; o, se stavo echeggiando su una pagina web, vorrei usare htmlspecialchars().

Cosa devo fare quando invio questi dati tramite e-mail? So che non mi devo preoccupare dell'iniezione SQL, ma per quanto riguarda XSS? Dovrei usare htmlspecialchars() anche su queste tre variabili?

mando la mail come questa:

mail('[email protected]', 'Contact From: '. $name, "$message", 'From: '. $email); 

Ho letto di iniezione e-mail, ma non riesco a capirlo.

Per favore fatemi sapere.

+0

Dipende da come lo si usa. Se stai impostando l'intestazione From in base all'uso, allora sì, sarà necessario disinfettare. – andrewsi

+0

Anche questo è qualcosa che non capisco! Non vedo l'ora di vedere la risposta per questo. – pattyd

+0

mail ('[email protected] ',' Contatta da: '. $ Name, "$ message",' From: '. $ Email); – user2471133

risposta

7

L'escape dipende interamente dal contesto in cui sono incorporati i dati.

Stai inviando messaggi HTML? Quindi hai un contesto HTML e devi usare htmlspecialchars().

Se si inviano messaggi di testo in chiaro, non è possibile eseguire l'escape per testo normale.

L'unica minaccia sarebbe che il tuo client di posta abbia qualche bug che interpreti il ​​testo in chiaro come qualcosa di eseguibile e poi agisce quando ricevi strani nomi e indirizzi di posta.

Ma questo si applica solo al contenuto della posta, non alle intestazioni effettive.

Si sta utilizzando un'intestazione di posta personalizzata From. Non usare questo. From viene utilizzato nei filtri spam. Se inserissi il mio indirizzo e-mail e tu invii questa mail con From: [email protected], stai impersonando il mio server di posta elettronica. Lo spam utilizzato per nascondere la fonte reale e reindirizzare i reclami e il feedback degli errori al ragazzo infelice dietro l'indirizzo di posta elettronica. Per questo oggi ci sono meccanismi che prevengono tali abusi. Quindi non fingere di mandare questa mail - TU.

Se si desidera essere in grado di rispondere con un clic sul pulsante di risposta, utilizzare l'intestazione Reply-to, ma utilizzare sempre From: [email protected].

Inoltre, queste intestazioni personalizzate sono il punto di ingresso per cose brutte. Assicurati di aggiungere solo indirizzi email. Assicurati di non aggiungere nessun carattere di avanzamento riga. Questi farebbero sì che il server di posta pensi che ci sia una nuova intestazione in arrivo, e questo potrebbe portare all'iniezione di intestazione della posta.

+0

Sto lasciando che l'utente inserisca tutto, tranne dove va l'email. Quindi l'utente può inserire tag html, tag di script e così via nel campo nome, email e messaggio – user2471133

0

Il problema è semplice. Se qualche utente può inviare a qualcun altro un'email, potrebbe utilizzare HTML o JavaScript che viene interpretato nella maggior parte dei client di posta elettronica e in ogni interfaccia webmail per riscrivere i contenuti. Poteva inserire un iFrame che caricava un altro sito o iniettava uno Script PopUp.

È molto importante disinfettare l'input nel modo in cui lo si sanitizza per un browser.

+0

L'HTML viene interpretato solo se le intestazioni di e-mail indicano che il contenuto contiene HTML. Prova a inviare un messaggio in chiaro contenente Ciao a qualcuno ... – deceze

+0

Non pensi che danneggerei l'email dell'utente in quel modo? Se utilizzo htmlspecialchars() su di esso? – user2471133

+0

Anche nelle e-mail di testo semplice, l'utente malintenzionato può semplicemente inserire un collegamento a un target dannoso e ogni client moderno evidenzierà questi ... Disinfezione e filtro è importante! – FloydThreepwood

3

è necessario convalidare l'indirizzo di posta elettronica per assicurarsi che singolari e non più indirizzi e-mail per fermare lo spamming

http://www.php.net/manual/en/filter.filters.validate.php

$email = "[email protected]"; 

if(!filter_var($email, FILTER_VALIDATE_EMAIL)) 
    { 
    echo "email not valid"; // do not send 
    } 
else 
    { 
    echo "email valid"; // send 
    } 
+0

Quindi devo solo convalidare il campo $ email e non $ nome e $ messaggio? – user2471133

+0

@ user2471133 var email è la parte principale ma è possibile anche modificare @ in nome e messaggio su [at]. '$ name = str_replace ('[at]', '@', $ name);' '$ message = str_replace ('[at]', '@', $ message);' – amigura

+0

alcune informazioni extra per te [link ] http://www.securephpwiki.com/index.php/Email_Injection [link] – amigura

Problemi correlati