wordpress no spamm

Привет, мир!

«Привет, мир! — Добро пожаловать в WordPress. Это ваша первая запись. Отредактируйте или удалите ее, затем начинайте создавать!»

Эта фраза знакома каждому, кто когда нибудь пробовал создать свой блог на движке вордпресс. Ну что-же, оставим первый пост самого ВП, дабы Вы, читающие, прониклись духом…, так сказать.

Любой новый сайт конечно же привлекает интерес ботов, в том числе и спаммерских, особенно если он построен на популярных CMS, а поскольку WordPress самый популярный блоговый движок, то апосля установки я сразу полез бороться с автоспамом, и первый мой шаг был удаление дефолтных плагинов в WordPress , в том числе и Akismet! Интересный подход к борьбе со спаммом? На сей подвиг меня воодушевила статья, найденная на просторах интернета. Однако в этой статье был описан вариант для старых версий WordPress, поэтому пришлось изобретать свой велосипед по данному принципу.

Немного теории. Автопостинг по популярным движкам проводится при помощи специальных скриптов или софта, в которых уже настроены нужные поля для заполнения, а именно имя, е-майл и собственно тело сообщения. Чтобы обмануть злую спаммерскую софтину, достаточно добавить поле с необычным именем и читать данные из него, а стандартное поле ввода визуально скрыть со страницы, в итоге реальный посетитель сайта будет писать свой комент в видимое поле (с уникальным именем) а автопостинг спамма будет слать комменты в стандартном поле. В подавляющем большинстве случаев этого вполне достаточно, если ещё и блочить юзеров, приславших коммент в стандартном поле — тогда вообще класс! Однако некоторые ситуации всё же требуют большей защиты, например у Вас очень популярный блог и спаммеры настойчиво хотят еженедельно постить на нем свои комменты со ссылками на свои порносайты ибо 100500+ уников это стоит усилий. Для этого они потрошат в браузере вашу страницу и выявляют уникальное имя вашего поля к примеру name=«no_spamm_comment» вместо стандартного name=«comment», сделали в своей базе данных запись «использовать для вашего сайта поле «no_spamm_comment», и продолжают долго и счастливо постить свои ссылки. Тут же сразу на ум приходит сделать рандомное имя поля, то есть каждый раз разное…… Этим сейчас и займемся

Итак, имеем WordPress версии 5.0 с одной стороны, и свору голодных спаммеров с другой. Реализация при помощи плагинов заметно больше нагружает движок нежели прямая правка в коде самого WordPress, а посему правим код. Для реализации нашего замысла потребуется отредактировать 4 файла:

  1. wp-load.php в начале, после <?php вставляем строку:
    define( 'RANDOM_VALUE', 'произвольный_набор_символов' );
    задаем константу с произвольным набором символов, будем её использовать как соль для хеша
  2. wp-content/themes/ваш_шаблон/css/responsive.css вставляем строку:
    .smo {display:none}
    чтобы элемент не отображался на странице
  3. wp-content/themes/ваш_шаблон/comments.php перед строкой
    $comment_args = array(..... вставляем строку:
    $random_name_comment=md5( RANDOM_VALUE .$GLOBALS['_COOKIE']['PHPSESSID']);
    генерируем условно-рандомное имя поля.
    Далее чуть ниже ищем строку
    <p><textarea ..... name="comment".....></textarea></p>
    и копипастим тут же второй экземпляр этой строки. В первой копии в тег р добавляем класс невидимости
    <p class="smo" ><textarea ..... name="comment".....></textarea></p>
    Во второй копии меняем имя поля на рандомное
    <p>
    <textarea ..... name="'.$random_name_comment.'".....></textarea>
    </p>

  4. wp-includes/comment.php в функцию wp_handle_comment_submission в самом начале вставляем строку:
    $random_name_comment=md5( RANDOM_VALUE .$GLOBALS['_COOKIE']['PHPSESSID']);
    , а строки
    if ( isset( $comment_data['comment'] ) && is_string( $comment_data['comment'] ) ) {
    $comment_content = trim( $comment_data['comment'] );
    }

    меняем на
    if ( isset( $comment_data[$random_name_comment] ) && is_string( $comment_data[$random_name_comment] ) ) {
    $comment_content = trim( $comment_data[$random_name_comment] );
    }

Вот в принципе и всё, в итоге имеем всегда разное имя поля, для реальных посетителей оно не заметно, а для автоспамма — беда. Можете тут же и протестить.

Комментировать

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