
Это решение защиты от спама на JavaScript хорошо работает на этом сайте и я делюсь им с вами. Для крупных проектов с большим количеством пользователей возможно более эффективно использовать reCAPTCHA by Google “Я не робот” или разрешить писать комментарии только авторизованным пользователям.
Преимущество моего решения, это минимализм, отсутствие плагинов и нет дополнительных скриптов которые увеличивают время загрузки страницы. Так как после установки той же reCAPTCHA, на PageSpeed Insights падают показатели скорости загрузки страницы.
Я использую два способа фильтрации одновременно, Шаг 1 и Шаг 2. Проверяю выполняется ли JavaScript и фильтрую комментарий на наличие ссылок (обычно их пишут ради ссылок). Этого достаточно для того чтобы, пользователям было удобно писать комментарии без CAPTCHA и без премодерации. А мне не нужно тратить много времени на спам комментарии. Дополнительно в настройках WordPress стоит премодерация, если в комментарии содержится 1 ссылка, на всякий случай.
Шаг 1. Проверка на выполнение JavaScript

Для WordPress. Открываем functions.php в Notepad++, (кодировка utf8-без BOM) вашей темы и пишем код ниже:
Для вашего HTML кода, не CMS. В форму добавления комментария добавляем скрытое поле с именем name="check" и пустым значением value="":
В кнопку отправки формы добавляем JavaScript код:
onclick="document.getElementById('check').value = 'stopSpam';"Проверяем ответ. В корне вашего WordPress wp-comments-post.php, который проверяет данные из формы комментариев делаем дополнительную проверку:
Открываем в Notepad++, (кодировка utf8-без BOM). Пишем после nocache_headers();:
if ( ! is_user_logged_in()){
if ($_POST['comment'] !== '') {
if ($_POST['check'] != 'stopSpam') {
wp_die('Error: Are you human? Please turn on JavaScript');
}
}}
Не забывайте что после обновления WordPress, эту строку нужно будет прописывать заново.
Принцип действия этого метода основывается на том, что спам-боты не умеют выполнять программы на JavaScript. И если на кнопку “Отправить” нажмет человек, то при нажатии на кнопку выполнится JavaScript код, в результате выполнения которого в скрытое поле с идентификатором id="check" в переменную "check" запишется значение "stopSpam". А в случае с роботом переменная так и останется пустой.
И все что останется предпринять – это проверить в скрипте чему равна полученная переменная с именем "check". Если оно равно проверочному слову "stopSpam", значит сообщение отправил человек. Ну а в противном случае, процентов на 99 (1% – вдруг у пользователя отключен JavaScript) – это робот.
Шаг 2. Проверка на наличие ссылок

Для фильтрации (спам) ссылок от некоторых хитрых ботов и людей, дополнительно проверяем наличие ссылок в post запросе, чтобы они не попадали в базу данных WordPress в папку “Cпам”, (комментарии хранятся в ней 30 дней и потом удаляются).
Проверяем ответ. В корне вашего WordPress wp-comments-post.php, который проверяет данные из формы комментариев делаем дополнительную проверку:
Открываем в Notepad++, (кодировка utf8-без BOM). Пишем после nocache_headers();:
Напишите в комментариях, помог вам мой способ в борьбе со спамом или нет?


Это быстрее, чем любой другой инструмент, который я использовал до сих пор. Настоятельно рекомендую этот шедевр!
Спасибо! Очень толково!
Спасибо, классный материал, долго искал как защитить свой сайт от ботов. Установил защиту вашим способом. Все работает.