Защищаем Contact form 7 от спама

1с и web разработка

Я, наверное как и многие, стал жертвой спама, который лился через плагин wordpress «contact form 7»

С одной стороны без этого плагина никуда, а с другой — такое кол-во спама (до 20 писем в день).

Я пробовал и капчу ставить и вопросы в стиле 5+5=?, но ничего не помогало. Решение в конечном итоге нашлось.

Суть описываемого способа проста.

Как работают спам боты?

Они делают запрос через HTTP соединение и отправляют данные.

При таких запросах боты не обрабатывают скрипты и не нажимают кнопку отправить.

Этим мы и воспользуемся.

Сделаем так, чтобы при нажатии кнопки отправить заполнялось невидимое для пользователя поле.

У пользователя (в браузере) будет отрабатывать javascript, а у спамбота — не будет.

А потом будем проверять так заполнено это поле или нет.

Для этого нам понадобиться ftp доступ и блокнот.

  1. В админке открываем форму и добавляем поле «[text* antispam]»
    Это обязательное текстовое поле.
    «antispam» — имя поля. Рекомендую дать этому полю свое имя.
    Имя этого поля будет использоваться и в дальнейшем.
    Если измените его имя — поменяйте везде!
  2. Открываем стили. И там добавляем
    .antispam {
    display:none;
    }
    Это нужно для того, чтобы пользователь не видел этого поля.
  3. Тут зависит от версии. Не знаю с какой версии они убрали функцию «beforeSerialize». Но если Вы не нашли этой функции — переходите к плану б.

    а) Для старых версий. Открываем файл «\wp-content\plugins\contact-form-7\includes\js\scripts.js»
    И добавляем в функцию «beforeSerialize: function($form, options) {» следующую строку:

    б) Для новых версий. Открываем файл «\wp-content\plugins\contact-form-7\includes\js\scripts.js».
    И добавляем в функцию «wpcf7.submit = function( form ) {» после строки «var $form = $( form );» следующую строку:

    Тут antispam — имя поля, которое мы обозначили в п.1.

    ‘nospam’ — наше кодовое слово, которое мы будем дальше проверять.
    Тоже рекомендую его изменить.

  4. В функции темы добавляем следующий код:

    Готово. Спам больше не приходит.

5 комментариев

  1. Илья:

    Приветствую.
    Есть вопрос по данному примеру, как с Вами можно связаться?
    Спасибо.

  2. Александр:

    Спасибо! Помогло!

  3. Владимир:

    Добрый день. у меня в scripts.js нет строки «beforeSerialize:…… как быть?

    • admin:

      Дополнил статью. Там только 3 пункт стал выглядить по-другому. Разделил его на «Старую версию» и «Новую версию»

  4. Не работает… Поле ввода имени определяет как спам… Как исправить?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *