Sisupoika
31-12-2007, 13:02
Chiunque usi internet si sara' trovato spesso in siti internet dove viene fatta la verifica di un indirizzo email mediante regular expressions (specialmente con javascript) che opera puramente sul formato dell'indirizzo, perche' questa e' la strada che purtroppo molti (poor) developers scelgono (o e' l'unica che conoscono) - personalmente nelle mie applicazioni opero la verifica dell'esistenza della mailbox direttamente sul server del dominio dell'indirizzo, ma sembra che purtroppo non molti sviluppatori facciano altrettanto).
Le regular expressions sono uno strumento molto potente per fare molte cose, ma leggendo attentamente le specifiche RFC2822 (http://www.faqs.org/rfcs/rfc2822.html) sull'SMTP (sto scrivendo un servizio web interfacciato ad un mail server), pare che molti siti web facciano controlli che non dovrebbero affatto, applicando restrizioni che non dovrebbero, toppando invece li' dove dovrebbero bloccare..usando caratteri speciali...
Es. Paragrafo 2.3.10: La prima parte dell'indirizzo email, quella che precede il simbolo @, e' definita "local part", e dovrebbe essere interpretata solo dall'host che riceve la mail inviata a quell'indirizzo, e che in pratica gestisce la posta elettronica per il dominio di quell'indirizzo email.
Indirizzi email del tipo:
"Abc\@def"@esempio.com
"Sisu Poika"@esempio.com
"Sisu\\Poika"@esempio.com
"Sisu@poika"@esempio.com
sisu/[email protected]
[email protected]
!def!xyz%[email protected]
[email protected]
stando alle specifiche dell'SMTP, sarebbero completamente validi, ma verrebbero bloccati da stupidi controlli javascript e simili, basati sulle regular expressions, solo perche' contengono caratteri come le virgolette, slash, backslash, dollaro, punto esclamativo, percentuale, underscore o altri simboli come la &, l'asterisco, il segno -, il simbolo di uguale, apice, apostrofo, elevato a potenza, circa, cancelletto, segno +, punto interrogativo, parentesi graffe!!! :D
Stando alle specifiche sull'SMTP, un validatore di indirizzi email dovrebbe praticamente ignorare la prima parte (locale) dell'indirizzo.
Cosa c'e' di piu'? Molti di questi controlli basati sulle RE bloccano anche indirizzi email che facciano uso del formato xxxx.xxxx.com, cioe' con un altro punto (o piu' di uno) precedenti l'estensione del dominio (come, nell'esempio, .com).
Anche questo e' errato!!! Pensate ai domini .name: io posso registrare un dominio del tipo sisu.poika.com (formato nome.cognome.com), ma a conti fatti mi verrebbe bloccato e rifiutato da moltissimi, innumerevoli applicazioni e servizi web!!! :D
Il bello, per chiudere, e' che molti servizi e applicazioni antispam e antiphishing usano le regular expressions per verificare la validita' di un indirizzo email, invece di verificarne l'esistenza fisica sul server, solo perche' piu' rapido. Ogni buon programmatore sa che vi sono caratteri speciali e trucchetti vari per aggirare anche regular expressions abbastanza restrittive, e certamente gli spammers professionisti ne sono a conoscenza.
Mi chiedo, dunque, perche' molti servizi e applicazioni continuino ad usare metodi cosi' stupidi per effettuare verifiche anziche' controllare l'esistenza della mailbox;
1) si rischia di bloccare indirizzi email validi (infatti, se e' vero che nessuno probabilmente usa indirizzi email del tipo che ho scritto sopra - sebbene validi secondo le specifiche, e' anche vero che in alcuni casi indirizzi con domini nome.cognome.com - giusto per esempio - verrebbero bloccati da una regola scritta male e che non tiene conto delle specifiche SMTP)
2) uno spammer che sa come aggirare controlli fatti con le regular expressions puo' scriversi un programmino che mandi milioni di emails generando indirizzi a tromba che bypassino tali controlli (credetemi, molto piu' facile di quanto probabilmente uno pensa).
L'invito e', dunque, agli sviluppatori in ascolto: verificate l'esistenza di una mailbox sul server (e' vero che e' un po' complicato scriversi del codice per far cio', ma e' anche vero che vi sono molti webservices pronti allo scopo), e lasciate perdere javascript e regular expressions :D
Le regular expressions sono uno strumento molto potente per fare molte cose, ma leggendo attentamente le specifiche RFC2822 (http://www.faqs.org/rfcs/rfc2822.html) sull'SMTP (sto scrivendo un servizio web interfacciato ad un mail server), pare che molti siti web facciano controlli che non dovrebbero affatto, applicando restrizioni che non dovrebbero, toppando invece li' dove dovrebbero bloccare..usando caratteri speciali...
Es. Paragrafo 2.3.10: La prima parte dell'indirizzo email, quella che precede il simbolo @, e' definita "local part", e dovrebbe essere interpretata solo dall'host che riceve la mail inviata a quell'indirizzo, e che in pratica gestisce la posta elettronica per il dominio di quell'indirizzo email.
Indirizzi email del tipo:
"Abc\@def"@esempio.com
"Sisu Poika"@esempio.com
"Sisu\\Poika"@esempio.com
"Sisu@poika"@esempio.com
sisu/[email protected]
[email protected]
!def!xyz%[email protected]
[email protected]
stando alle specifiche dell'SMTP, sarebbero completamente validi, ma verrebbero bloccati da stupidi controlli javascript e simili, basati sulle regular expressions, solo perche' contengono caratteri come le virgolette, slash, backslash, dollaro, punto esclamativo, percentuale, underscore o altri simboli come la &, l'asterisco, il segno -, il simbolo di uguale, apice, apostrofo, elevato a potenza, circa, cancelletto, segno +, punto interrogativo, parentesi graffe!!! :D
Stando alle specifiche sull'SMTP, un validatore di indirizzi email dovrebbe praticamente ignorare la prima parte (locale) dell'indirizzo.
Cosa c'e' di piu'? Molti di questi controlli basati sulle RE bloccano anche indirizzi email che facciano uso del formato xxxx.xxxx.com, cioe' con un altro punto (o piu' di uno) precedenti l'estensione del dominio (come, nell'esempio, .com).
Anche questo e' errato!!! Pensate ai domini .name: io posso registrare un dominio del tipo sisu.poika.com (formato nome.cognome.com), ma a conti fatti mi verrebbe bloccato e rifiutato da moltissimi, innumerevoli applicazioni e servizi web!!! :D
Il bello, per chiudere, e' che molti servizi e applicazioni antispam e antiphishing usano le regular expressions per verificare la validita' di un indirizzo email, invece di verificarne l'esistenza fisica sul server, solo perche' piu' rapido. Ogni buon programmatore sa che vi sono caratteri speciali e trucchetti vari per aggirare anche regular expressions abbastanza restrittive, e certamente gli spammers professionisti ne sono a conoscenza.
Mi chiedo, dunque, perche' molti servizi e applicazioni continuino ad usare metodi cosi' stupidi per effettuare verifiche anziche' controllare l'esistenza della mailbox;
1) si rischia di bloccare indirizzi email validi (infatti, se e' vero che nessuno probabilmente usa indirizzi email del tipo che ho scritto sopra - sebbene validi secondo le specifiche, e' anche vero che in alcuni casi indirizzi con domini nome.cognome.com - giusto per esempio - verrebbero bloccati da una regola scritta male e che non tiene conto delle specifiche SMTP)
2) uno spammer che sa come aggirare controlli fatti con le regular expressions puo' scriversi un programmino che mandi milioni di emails generando indirizzi a tromba che bypassino tali controlli (credetemi, molto piu' facile di quanto probabilmente uno pensa).
L'invito e', dunque, agli sviluppatori in ascolto: verificate l'esistenza di una mailbox sul server (e' vero che e' un po' complicato scriversi del codice per far cio', ma e' anche vero che vi sono molti webservices pronti allo scopo), e lasciate perdere javascript e regular expressions :D