Email sicure PHP
- Pagina precedente E-mail PHP
- Pagina successiva Errore PHP
Nel codice PHP e-mail del paragrafo precedente, c'è una falla.
Iniezione di email PHP
Prima di tutto, guardate il codice PHP del paragrafo precedente:
<html> <body> <?php if (isset($_REQUEST['email'])) //Se "email" è compilato, invia email { //Invia email $email = $_REQUEST['email']; $subject = $_REQUEST['subject']; $message = $_REQUEST['message']; mail("someone@example.com", "Oggetto: $subject", $message, "Da: $email" ); echo "Grazie per aver utilizzato il nostro modulo di posta"; } else //Se "email" non è compilato, visualizza il modulo { echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text' /><br /> Oggetto: <input name='subject' type='text' /><br /> Messaggio:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; } ?> </body> </html>
Il problema del codice sopra è che gli utenti non autorizzati possono inserire dati nella testa dell'email tramite il modulo.
Se l'utente inserisce questi testi nei campi di input del modulo, cosa potrebbe accadere?
someone@example.com%0ACc:person2@example.com %0ABcc:person3@example.com,person3@example.com, anotherperson4@example.com,person5@example.com %0ABTo:person6@example.com
Come al solito, la funzione mail() inserisce il testo sopra nella testa dell'email, quindi ora la testa ha i campi aggiuntivi Cc:, Bcc: e To:. Quando l'utente clicca sul pulsante di invio, questa email verrà inviata a tutti gli indirizzi sopra elencati!
Prevenzione dell'iniezione di email in PHP
Il miglior metodo per prevenire l'iniezione di email è verificare l'input.
Il seguente codice è simile a quello del paragrafo precedente, ma abbiamo aggiunto il programma di verifica dell'input del campo email del modulo:
<html> <body> <?php function spamcheck($field) { //filter_var() sanifica l'email //indirizzo email utilizzando FILTER_SANITIZE_EMAIL $field=filter_var($field, FILTER_SANITIZE_EMAIL); //filter_var() verifica l'email //indirizzo email utilizzando FILTER_VALIDATE_EMAIL if(filter_var($field, FILTER_VALIDATE_EMAIL)) { return TRUE; } else { return FALSE; } } if (isset($_REQUEST['email'])) //se è compilato "email", procedi //controllare se l'indirizzo email è non valido $mailcheck = spamcheck($_REQUEST['email']); if ($mailcheck==FALSE) { echo "input non valido"; } else //inviare una email $email = $_REQUEST['email']; $subject = $_REQUEST['subject']; $message = $_REQUEST['message']; mail("someone@example.com", "Oggetto: $subject", $message, "Da: $email" ); echo "Grazie per aver utilizzato il nostro modulo di posta"; } } else {//se "email" non è compilato, visualizza il modulo echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text' /><br /> Oggetto: <input name='subject' type='text' /><br /> Messaggio:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; } ?> </body> </html>
Nell'esempio di codice sopra, abbiamo utilizzato i filtri PHP per validare l'input:
- FILTER_SANITIZE_EMAIL rimuove i caratteri illegali dall'email
- FILTER_VALIDATE_EMAIL verifica l'indirizzo email
Puoi trovare i nostri Filtro PHPLeggi di più su questo argomento in questa sezione.
- Pagina precedente E-mail PHP
- Pagina successiva Errore PHP