Szenario:
Ich habe ein Kontaktformular auf meiner Web-App, es wird viel Spam.
Ich überprüfe das Format von E-Mail-Adressen lose, d. H. ^[email protected]+\..+$
Ich benutze einen Spam-Filter-Dienst (Defensio), aber die Spam-Scores überschneiden sich mit gültigen Nachrichten. Bei einem Schwellenwert von 0,4 kommt Spam durch und einige Kundenfragen werden falsch in ein Protokoll geworfen und ein Fehler angezeigt.Verwenden von MX-Datensätzen zum Validieren von E-Mail-Adressen
Alle Spam-Nachrichten verwenden gefälschte E-Mail-Adressen, z. [email protected]
Dedicated PHP5 Linux-Server in den USA, mysql, nur Spam-Spam, E-Mail die nicht-Spam-Nachrichten (nicht gespeichert).
Vorschlag: Verwendung von PHP checkdnsrr(preg_replace(/^[email protected]/, '', $_POST['email']), 'MX')
ist die E-Mail-Domäne auf eine gültige Adresse aufgelöst zu überprüfen, eine Datei protokollieren, dann mit einem Fehler umleiten für Nachrichten, die geht in den Spam-Filter-Service nach wie vor für Adressen nicht auflösen die sich nach checkdnsrr()
auflösen.
Ich habe gelesen (und ich bin skeptisch über diese selbst), dass Sie diese Art der Validierung nie auf Remote-Lookups verlassen sollten, aber warum?
Abgesehen von Konnektivitätsproblemen, wo ich größere Probleme als ein Kontaktformular sowieso haben werde, wird Checkdnsrr auf falsche Positive/Negative stoßen?
Würden einige Adreßtypen nicht aufgelöst werden? Regierungsadressen? IP-E-Mail-Adressen?
Muss ich den Hostnamen umgehen, den ich an checkdnsrr() übergebe?
Lösung: Eine Kombination aller drei Antworten (wünschte, ich könnte mehr als eine als eine zusammengesetzte Antwort akzeptieren).
Ich verwende:
$email_domain = preg_replace('/^[email protected]/', '', $email).'.';
if(!checkdnsrr($email_domain, 'MX') && !checkdnsrr($email_domain, 'A')){
//validation error
}
Alle Spam protokolliert wird und gedreht wird. Mit dem Ziel, zu einem späteren Zeitpunkt auf eine Jobwarteschlange zu aktualisieren.
Einige Kommentare wurden über die Frage der Mail-Server für den Benutzer zu überprüfen, ich dachte, dies wäre zu viel Verkehr und könnte meinen Server gebannt oder in Schwierigkeiten geraten, und dies ist nur um die meisten der E-Mails, die aufgrund ungültiger Serveradressen zurückgeschickt wurden.
http://en.wikipedia.org/wiki/Fqdn und
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.
Vielen Dank an alle (vor allem ZoogieZork für die Ein Tipp Rekordrückfall)
+1 .. Ich habe noch nie überprüft für eine gültige E-Mail gehört durch die MX-Datensätze überprüft .. das ist eine gute Idee, wie ich finde. – Earlz
Denken Sie daran, den A-Eintrag zu überprüfen, wenn kein MX-Eintrag aufgeführt ist, wie in RFC 5321 definiert. Es ist selten, aber einige Domänen haben keinen MX-Eintrag (aus verschiedenen Gründen). Mehr Infos: http://en.wikipedia.org/wiki/MX_record#History_of_fallback_to_A – ZoogieZork
Prost Zork, genau die Art von Gotchas, um die ich mir Sorgen machte. –