Utiliser les enregistrements MX pour valider les adresses e-mail
Scénario:
J'ai un formulaire de contact sur mon application web, elle obtient beaucoup de spam.
Je suis de la validation du format des adresses e-mail vaguement c'est à dire ^.+@.+\..+$
Je suis à l'aide d'un spam filtering service (defensio) mais le spam scores retourné se chevauchent avec des messages valides. À un seuil de 0,4 certains messages de spam à travers et quelques questions sont, à tort, jeté dans un journal et une erreur s'affiche.
Tous les messages de spam utilisent de fausses adresses e-mail par exemple [email protected]
Dédié PHP5 serveur Linux en NOUS, mysql, l'exploitation forestière spam, seul, l'envoi de courriels non les messages de spam (non stockés).
Proposition:
Utilisation de php checkdnsrr(preg_replace(/^.+?@/, '', $_POST['email']), 'MX')
de vérifier le courrier électronique résout à une adresse valide, log fichier, puis rediriger avec un message d'erreur pour des messages qui ne se résout pas, passez à le service de filtrage du spam comme avant pour les adresses qui ne résolvent en fonction de checkdnsrr()
.
J'ai lu (et je suis sceptique à propos de ce moi-même) que vous ne devriez jamais laisser ce type de validation à distance des recherches, mais pourquoi?
À part les problèmes de connectivité, où j'aurai plus de problèmes que d'un formulaire de contact, de toute façon, est checkdnsrr d'aller à la rencontre de faux positifs/négatifs?
Y aurait-il certains types d'adresse qui a coutume de les résoudre? gov adresses? ip, adresses e-mail?
Ai-je besoin d'échapper le nom d'hôte que je passe à checkdnsrr()?
Solution:
Une combinaison de tous les trois réponses (souhaite que je pourrais accepter plus d'un comme un composé de réponse).
Je suis en utilisant:
$email_domain = preg_replace('/^.+?@/', '', $email).'.';
if(!checkdnsrr($email_domain, 'MX') && !checkdnsrr($email_domain, 'A')){
//validation error
}
Tout le spam qui est enregistré et tourné.
En vue de la mise à niveau vers une file d'attente de travail à une date ultérieure.
Certaines observations ont été faites sur le point de demander au serveur de messagerie de l'utilisateur de vérifier, j'ai senti que ce serait trop de trafic et pourrait obtenir mon serveur interdits ou des ennuis, d'une certaine façon, et ce n'est qu'à découper la plupart des e-mails qui ont été renvoyés en raison valide les adresses de serveur.
http://en.wikipedia.org/wiki/Fqdn
et
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.
Un grand merci à tous (surtout ZoogieZork pour l'enregistrement de secours pointe)
source d'informationauteur Question Mark | 2009-12-29
Vous devez vous connecter pour publier un commentaire.
Je ne vois pas de mal de faire un MX de recherche avec
checkdnsrr()
et aussi, je ne vois pas comment les faux positifs peuvent apparaître. Vous n'avez pas besoin d'échapper le nom de l'hôte, en fait, vous pouvez utiliser cette technique, et prenons un peu plus loin en parlant de la MTA et de test si l'utilisateur existe à un hôte donné (cependant, cette technique peut et va probablement vous obtenir certains faux positifs dans certains hôtes).Des recherches DNS peut être lent à certains moments, en fonction du trafic sur le réseau & de la congestion, de sorte que c'est quelque chose d'être conscient de.
Si j'étais à votre place, je ferais de la tester et de voir comment il va. Pendant une semaine, le journal de tous les e-mails dans une base de données ou un fichier journal et inclure un champ pour indiquer si il serait marqué comme spam ou de courrier électronique légitime. Après la semaine est terminée, jetez un oeil sur les résultats et voir si c'est la scène que vous attendez.
La prise de cette connexion/approche de test vous permet de tester et de ne pas vous inquiéter de perdre des clients mails.
J'ai pris l'habitude d'ajouter un champ supplémentaire à mes formulaires qui est caché en CSS, si c'est rempli je suppose que c'est envoyé par un robot de spam. J'ai aussi assurez-vous d'utiliser un nom comme "url" ou "website_url" quelque chose qui ressemble à une légitime nom de champ pour un robot de spam. Ajouter une étiquette pour le champ qui dit quelque chose comme "Ne pas remplir ce champ" donc si quelqu'un navigateur ne rend pas correctement, ils ne savent pas à remplir le spam champ. Jusqu'à présent, il fonctionne très bien pour moi.
Un MX de Recherche n'est qu'une partie de l'image, si vous voulez vous assurer que l'adresse e-mail est elle-même valide, alors vous devez essayer d'envoyer un e-mail de ce compte.
L'autre scénario possible est, quelqu'un peut être en utilisant simplement détourné des comptes de courriel à partir d'une machine compromise de toute façon. Bien sûr, c'est sans doute un peu moins susceptible de se produire, mais elle le fait encore.
Il y a l'adresse de courriel de validation des bibliothèques qui font cela, il suffit de rechercher l'email de validation.
Tout cela peut être fait de manière asynchrone. J'ai cette configuration sur mon site, auquel cas l'e-mail est enregistré dans la base de données (à des fins de vérification), un travail en file d'attente, puis quand le travail vient de temps à s'exécuter, ainsi que la validation est effectuée à ce point dans le temps. Il décharge le levage lourd pour un autre thread.
À l'utilisateur, il semble que si le courriel a été envoyé déjà, c'était (c'est dans la base de données), et peut être consulté à l'interne, mais l'e-mail ne sera pas obtenir envoyés par la poste jusqu'à ce que le travail s'exécute ce qui peut être immédiatement ou certains laps de temps en fonction de la charge du serveur.
Walter