Сегодня, в очередной раз просмотрев несколько ожидающих модерации сообщений в своем блоге у меня родилась идея как же можно обойти механизм премодерации спамерам.

Все заключается в особой опции движка, которая разрешает проверенным комбинациям логин + e-mail писать без премодерации(при отсутствии регистрации на сайте).
Если совпадут эти параметры(а среди знакомых мне сайтов, они почему-то совпадают) и если получится угадать e-mail любого посетителя блога(а чаще всего угадывается он для администратора. Обычно он в формате admin@example.com, где example.com - адрес блога) то можно забить весь блог спамовыми сообщениями, которые не будут ожидать премодерации, а сразу отобразятся на сайте.

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

Залатываем "дыру".

Вторая версия патча. Первый патч оказался "кривым". Тестируйте!
Чтобы отсеять шутников необходимо прописать проверку корректности адреса. В WordPress за это отвечает функция is_email в файле wp-includes/formatting.php .
Я запретил писать гостям с e-mail адресом в домене leks13.ru, заставив движок считать его невалидным(вроде бы на зарегистрированных это не отражается никак).

Находим в файле wp-includes/formatting.php следующий код:


// Test for invalid characters
if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) {
return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' );
}
}



И сразу после него добавляем условие проверки(например такое):


$str1 = $domain;
$str2 = "leks13.ru";
if (( strcasecmp ($str1,$str2))== 0 ) {
return apply_filters( 'is_email', false, $email, 'domain_period_limits' );
}


Не забудьте изменить домен на свой!

Также можно дописать любое условие.
Теперь можно не бояться комментариев от своего имени.

Лучше использовать ЭТОТ плагин.