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