Validare email in Javascript e PHP

Per chi sviluppa moduli e FORM di contatti, esiste la necessità di verificare l’immisione di un indirizzo di posta elettronica. Oggi più che mai, con demoni pronti ad eseguire SPAM ovunque, è bene tutelarsi da “furbetti” pronti a sfruttare i moduli HTML per inviare mail illegali o eseguire hack per SPAM e quant’altro.

La prima tutela può arrivare da Javascript, verificando – ad esempio – il campo email di un FORM prima di procedere con l’invio. Diciamo sin da subito che questo risulta un mero pagliativo, relativamente a sistemi di SPAM (o hacker) evoluti. Tuttavia è sempre meglio inserire qualche semplice controllo – preliminare – quantomeno per evitare distrazioni da parte dell’utente – corretto.

Prima di tutto un consiglio semplice: se chiedete il nome, oltre la mail, limitate la lunghezza in caratteri e controllate che al suo interno non sia presente il carattere AT (@). Questo viene spesso usato per inviare – anche in bcc – mail indesiderate. Un esempio eclatante è l’uso della funzione mail() sotto PHP. Il primo parametro di questo funzione è l’indirizzo del destinatario, nella forma semplice:

1
mail("info@e-lementi.com",...);

oppure nella forma estesa

1
mail( $name.' < '.$email.'>', ...) ;

Alcuni sviluppatori usano proprio la forma estesa, inserendo quindi il nome del destinatario chiesto nel FORM, ottenendo una sintassi simile a questa:

1
mail( $name.' < '.$email.'>', ...);

Alcuni furbacchioni, quindi, postano in $name una stringa simile a questa: ind1@dom1.com, ind2@dom2.com, … Così facendo la funzione mail() si trova costretta ad inviare posta a tutti quegli indirizzi, causando non pochi problemi (vedi code sul server). Morale, il nome NON deve essere un indirizzo di posta elettronica!

Verificare invece la correttezza di una email è piuttosto facile, quantomeno a livello sintattico:

1
2
3
4
5
var r = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
if( r.test( email ) )
    alert("e-mail corretta!");
else
    alert("e-mail NON corretta!");

Si possono poi aggiungere tutta una serie di controlli aggiuntivi personalizzati come: liste di esclusione o inclusione di domini, liste di esclusioni di username, ecc…

Un controllo estremamente più efficace, invece, può essere effettuato da PHP. Oltre a svolgere un controllo sintattico, utilizzando sempre le regular expression, si può sfruttare la funzione checkdnsrr() per eseguire un controllo sui records DNS e verificare, quindi, se il dominio indicato esista davvero!

Questo tipo di controllo – ovviamente – non fornisce una certezza del 100% sull’autenticità della mail, ma quantomeno screma tutta una serie di domini impossibili utilizzati esclusivamente allo scopo di intasare la – nostra – rete!

Insomma, con un controllo Javascript più uno PHP e un po’ di attenzione, possiamo almeno limitare i danni provocati dai simpaticoni che potrebbero codificare ben altro – qualcosina di più sottile e divertente – invece dei soliti SPAM (che ormai, diciamolo pure, hanno stancato e risultano davvero obsoleti).

2 commenti a: “ ”

  1. 09 mag, 2008 Classi Javascript e PHP per validare un’indirizzo di posta elettronica | Undolog.com:

    [...] il post Validare email in Javascript e PHP, ecco una simpatica classe Javascript in grado di verificare e controllare indirizzi di posta [...]

  2. 24 ott, 2008 Wordpress: come creare passo passo un proprio login | Undolog.com:

    [...] Eseguire una serie di controlli sui campi email e password (vedi anche Validare email in Javascript e PHP) [...]

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
                   <code></code> // blocco generico
                   [cc_actionscript][/cc_actionscript] // Actionscript
                   [cc_actionscript3][/cc_actionscript3] // Actionscript 3
                   [cc_css][/cc_css] // CSS Style Sheet
                   [cc_html][/cc_html] // HTML
                   [cc_js][/cc_js] // Javascript
                   [cc_objc][/cc_objc] // Objective-C
                   [cc_php][/cc_objc] // PHP
                   [cc_sql][/cc_sql] // SQL