Scenario:
Ho un modulo di contatto sulla mia app Web, riceve molto spam.
Sto convalidando il formato degli indirizzi di posta elettronica in modo approssimativo ^[email protected]+\..+$
Sto utilizzando un servizio di filtro antispam (defensio) ma i punteggi di spam restituiti si sovrappongono a messaggi validi. A una soglia di 0.4 lo spam arriva e alcune domande del cliente vengono erroneamente gettato in un log e viene visualizzato un errore.Utilizzo di record MX per convalidare gli indirizzi e-mail
Tutti i messaggi di spam utilizzano indirizzi e-mail falsi, ad es. [email protected]
Dedicato server Linux PHP5 negli Stati Uniti, mysql, registrazione solo spam, invio di posta elettronica ai messaggi non spam (non memorizzati).
Proposta: Usa di checkdnsrr(preg_replace(/^[email protected]/, '', $_POST['email']), 'MX')
php per verificare il dominio di posta elettronica si risolve in un indirizzo valido, accedere a file, quindi reindirizzare con un errore per i messaggi che non risolvono, procedere al servizio di filtro anti-spam come prima per gli indirizzi che si risolvono in base a checkdnsrr()
.
Ho letto (e sono scettico su questo anch'io) che non si dovrebbe mai lasciare questo tipo di convalida fino a ricerche remote, ma perché?
Oltre ai problemi di connettività, dove avrò comunque problemi maggiori rispetto a un modulo di contatto, si verificheranno dei falsi positivi/negativi?
Ci sarebbero alcuni tipi di indirizzi che non verranno risolti? indirizzi gov? indirizzi email ip?
Devo eseguire l'escape dell'hostname che passo a checkdnsrr()?
Soluzione: Una combinazione di tutte e tre le risposte (vorrei poterne accettare più di una come risposta composta).
sto usando:
$email_domain = preg_replace('/^[email protected]/', '', $email).'.';
if(!checkdnsrr($email_domain, 'MX') && !checkdnsrr($email_domain, 'A')){
//validation error
}
tutto lo spam viene registrato e ruotato. Per l'aggiornamento a una coda di lavoro in un secondo momento.
Alcuni commenti sono stati fatti per chiedere al server di posta per l'utente di verificare, ho pensato che sarebbe stato troppo traffico e potrebbe avere il mio server bannato o in qualche modo in difficoltà, e questo è solo per tagliare la maggior parte del e-mail che venivano rimbalzate a causa di indirizzi di server non validi.
http://en.wikipedia.org/wiki/Fqdn e
RFC2821
The lookup first attempts to locate an MX record associated with the name.
If a CNAME record is found instead, the resulting name is processed as if
it were the initial name.
If no MX records are found, but an A RR is found, the A RR is treated as
if it was associated with an implicit MX RR, with a preference of 0,
pointing to that host. If one or more MX RRs are found for a given
name, SMTP systems MUST NOT utilize any A RRs associated with that
name unless they are located using the MX RRs; the "implicit MX" rule
above applies only if there are no MX records present. If MX records
are present, but none of them are usable, this situation MUST be
reported as an error.
Molte grazie a tutti (soprattutto ZoogieZork per la punta record di ripiego)
+1 .. non ho mai sentito parlare di verifica di un indirizzo email valido controllando i record MX .. questo è una buona idea, credo. – Earlz
Ricordarsi di controllare il record A se nessun record MX è elencato, come definito in RFC 5321. È raro, ma alcuni domini non hanno un record MX (per vari motivi). Maggiori informazioni: http://en.wikipedia.org/wiki/MX_record#History_of_fallback_to_A – ZoogieZork
Cheers Zork, esattamente il tipo di trucchi che mi preoccupava. –