Сценарий:
У меня есть контактная форма в моем веб-приложении, она получает много спама.
Я правильно проверяю формат адресов электронной почты, т.е. ^[email protected]+\..+$
Я использую службу фильтрации спама (defensio), но полученные спам-счета перекрываются с действительными сообщениями. При пороге 0,4 происходит спам, и некоторые ошибки клиента ошибочно попадают в журнал и отображается ошибка.
Все сообщения спама используют поддельные адреса электронной почты, например. [email protected]
Выделенный сервер PHP5 Linux в США, mysql, только журналирование спама, отправка сообщений о нежелательной почте (не сохраняется).
Предложение:
Используйте php checkdnsrr(preg_replace(/^[email protected]/, '', $_POST['email']), 'MX')
для проверки домена электронной почты, который разрешает действительный адрес, записывается в файл, а затем перенаправляет сообщение с ошибкой для сообщений, которые не разрешаются, перейдите к службе фильтрации спама, как и прежде, для адресов, которые разрешают в соответствии с checkdnsrr()
.
Я прочитал (и я скептически отношусь к этому самому), что вы никогда не должны оставлять этот тип проверки до удаленных поисков, но почему?
Помимо проблем с подключением, где в любом случае у меня будут большие проблемы, чем контактная форма, checkdnsrr собирается встретить ложные срабатывания/негативы?
Будут ли какие-то типы адресов, которые не разрешат? gov адреса? ip адреса электронной почты?
Нужно ли мне избегать имени хоста, которое я передаю в checkdnsrr()?
Решение: Сочетание всех трех ответов (желательно, чтобы я мог принять более одного в качестве составного ответа).
Я использую:
$email_domain = preg_replace('/^[email protected]/', '', $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 за резервный отзыв A)