Эффективная защита от спама на JavaScript и php без CAPTCHA

Блог
  Stylelib  3 

Эффективная защита от спама на JavaScript и php без CAPTCHA

Это решение защиты от спама на JavaScript хорошо работает на этом сайте и я делюсь им с вами. Для крупных проектов с большим количеством пользователей возможно более эффективно использовать reCAPTCHA by Google “Я не робот” или разрешить писать комментарии только авторизованным пользователям.

Преимущество моего решения, это минимализм, отсутствие плагинов и нет дополнительных скриптов которые увеличивают время загрузки страницы. Так как после установки той же reCAPTCHA, на PageSpeed Insights падают показатели скорости загрузки страницы.

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

Шаг 1. Проверка на выполнение JavaScript

Эффективная защита от спама на JavaScript и php без CAPTCHA

Для 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. Проверка на наличие ссылок

Эффективная защита от спама на JavaScript и php без CAPTCHA

Для фильтрации (спам) ссылок от некоторых хитрых ботов и людей, дополнительно проверяем наличие ссылок в post запросе, чтобы они не попадали в базу данных WordPress в папку “Cпам”, (комментарии хранятся в ней 30 дней и потом удаляются).

Проверяем ответ. В корне вашего WordPress wp-comments-post.php, который проверяет данные из формы комментариев делаем дополнительную проверку:

Открываем в Notepad++, (кодировка utf8-без BOM). Пишем после nocache_headers();:

Напишите в комментариях, помог вам мой способ в борьбе со спамом или нет?

Похожие записи

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

  2. Спасибо! Очень толково!

  3. Спасибо, классный материал, долго искал как защитить свой сайт от ботов. Установил защиту вашим способом. Все работает.