Используя MX записывает для проверки адресов электронной почты

Сценарий:
У меня есть форма контакта на моем веб-приложении, это получает много спама.
Я проверяю формат адресов электронной почты свободно т.е. ^.+@.+\..+$
Я использую сервис фильтрации спама (defensio), но возвращенные очки спама накладываются с действительными сообщениями. В пороге 0,4 проходит некоторый спам, и вопросы некоторого клиента неправильно брошены в журнал и отображенную ошибку.

Весь спам передает адреса электронной почты фальшивки использования, например, zxmzxm@ywduasm.com

Выделенный сервер PHP5 Linux в США, mysql, регистрируя спам только, посылая не сообщения спама по электронной почте (не сохраненный).

Предложение: Используйте php's checkdnsrr(preg_replace(/^.+?@/, '', $_POST['email']), 'MX') проверять почтовый домен решает к допустимому адресу, журналу в файл, затем перенаправьте с ошибкой для сообщений, которые не решают, продолжаются к сервису спам-фильтра как прежде для адресов, которые действительно решают согласно checkdnsrr().

Я читал (и я скептически отношусь к этому сам), что Вы никогда не должны оставлять этот тип проверки до удаленных поисков, но почему?

Кроме проблем возможности соединения, где у меня будут большие проблемы, чем форма контакта так или иначе, checkdnsrr собирается встретиться с ложными положительными сторонами/отрицательными сторонами?
Были бы некоторые типы адресов та твердость привычки? адреса губернатора? IP адреса электронной почты?
Я должен выйти из имени хоста, которое я передаю checkdnsrr ()?

Решение: комбинация всех трех ответов (жаль, что я не мог принять больше чем один как составной ответ).

Я использую:

$email_domain = preg_replace('/^.+?@/', '', $email).'.';
if(!checkdnsrr($email_domain, 'MX') && !checkdnsrr($email_domain, 'A')){
   //validation error
}

Весь спам регистрируется и поворачивается. В целях обновления до очереди заданий позднее.

Некоторые комментарии были сделаны о просьбе, чтобы почтовый сервер для пользователя проверил, я чувствовал, что это будет слишком большим трафиком и могло бы запретить мой сервер или в проблему в некотором роде, и это только для включения большинства электронных писем, которые приходились в норму из-за недопустимых адресов сервера.

http://en.wikipedia.org/wiki/Fqdn и

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.

Большое спасибо всем (особенно ZoogieZork для рекордная подсказка по нейтрализации)

14
задан Question Mark 8 June 2010 в 15:08
поделиться

3 ответа

Я не вижу ничего плохого в поиске MX с помощью checkdnsrr(), а также не вижу, как могут появиться ложные срабатывания. Вам не нужно бежать от имени хоста, на самом деле вы можете использовать эту технику и продвинуть ее немного дальше, поговорив с MTA и протестировав, существует ли пользователь на данном хосте (однако, эта техника может и, вероятно, даст вам несколько ложных срабатываний на некоторых хостах)

.
5
ответ дан 1 December 2019 в 14:44
поделиться

DNS поиск иногда может быть медленным, в зависимости от сетевого трафика и перегруженности, так что это нужно знать.

Если бы я был на вашем месте, я бы протестировал его и посмотрел, как он проходит. В течение недели или около того, записывайте все письма в базу данных или лог-файл и включайте в них поле, чтобы указать, будет ли оно помечено как спам или законная почта. По окончании недели посмотрите на результаты и посмотрите, работает ли она так, как вы ожидаете.

Такой подход к тестированию дает вам гибкость в тестировании и позволяет не беспокоиться о потере клиентской почты.

Я вошёл в привычку добавлять в свои формы дополнительное поле, которое скрыто с помощью CSS, если оно заполнено, то я предполагаю, что оно подаётся спам-ботом. Я также стараюсь использовать имя типа "url" или "website_url", что-то похожее на законное имя поля для спам-бота. Добавьте в поле метку с надписью "Don't fill out this field" (Не заполняйте это поле), чтобы если чей-нибудь браузер не отображал его правильно, он знал, что не следует заполнять поле для спама. Пока это работает очень хорошо для меня.

5
ответ дан 1 December 2019 в 14:44
поделиться

MX поиск - это только часть картины, если вы хотите убедиться, что адрес электронной почты действителен, то вам нужно попытаться отправить письмо на эту учетную запись.

Другой возможный сценарий - кто-то все равно может просто использовать перехваченные учетные записи электронной почты со взломанной машины. Конечно, это, вероятно, немного менее вероятно, но все равно происходит.

Есть библиотеки проверки почтовых адресов, которые делают это, просто ищут подтверждение электронной почты.

Все это может быть сделано асинхронно. У меня есть такая настройка на сайте, и в этом случае электронное письмо сохраняется в базе данных (в целях аудита), ставится в очередь на выполнение задания, а затем, когда задание приходит на выполнение, в этот момент выполняется какая-либо дополнительная проверка. Это сбрасывает тяжелую нагрузку на другой поток.

Пользователю кажется, что письмо уже было отправлено, оно было (оно есть в базе данных), и его можно просмотреть внутренне, но фактическое письмо не будет отправлено до тех пор, пока не будет выполнено задание, которое может быть выполнено немедленно или через некоторое установленное время в зависимости от нагрузки на сервер.

Уолтер

.
0
ответ дан 1 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: