Защита от спам коментари и форми за обратна връзка, добавяне на Google reCAPTCHA v3 на WordPress сайт без използване на плъгин и с помощта на плъгин, оптимизация на сайта за скорост след добавяне на reCAPTCHA v3 – тези въпроси ще разгледаме в тази статия. И, между другото, описаната в статията защита от спам се използва успешно на този сайт.

Защита от спама

Защитата от спама на формуляра за обратна връзка е подробно обяснена в статията: „WordPress Email. Настройка на изпращане на писма„. Тук ще разгледаме и защитата от спам на коментарите. Дори младите уебсайтове се сблъскват с тонове коментари от спамери и ръчното изтриване на спам е много трудоемко.

Най-добрият начин за защита от спам е да добавите капча на уебсайта.

Google reCAPTCHA v3 срещу Google reCAPTCHA v2

Колко ме дразни да потвърждавам, че не съм робот, като отбелязвам картинки със светофори, пешеходни пътеки или хидранти. Това е Google reCAPTCHA v2. За разлика от нея, Google reCAPTCHA v3 работи в заден план, без никакво взаимодействие с потребителя. Потребителят не вижда и не въвежда нищо. ReCAPTCHA v3 анализира действията на потребителя и издава числова вероятност дали потребителят е човек или робот.

Нека не дразним потребителите на нашия уебсайт и добавим Google reCAPTCHA v3 на сайта.

Капча и сървърно кеширане

Сървърното кеширане е техника, която позволява съхраняването на копия на динамично генерираните уеб страници на сървъра и предоставянето им отново на клиентите без нужда от изпълнение на скъпи операции за обработка на сървъра. Предимствата на сървърното кеширане са подобряване на производителността на сайта и намаляване на натоварването на сървъра. За WordPress сайтове сървърното кеширане се активира чрез плъгин WP Fastest Cache. Повече информация можете да намерите в статията: „Оптимизация на WordPress. Ускоряване на зареждането на сайта„.

Сървърното кеширане пречи на работата на стандартната капча, която е представена като изображение с текст, който потребителят трябва да въведе. Такава капча се генерира на сървъра и след това се изпраща на потребителя и се показва в неговия браузър. При включено сървърно кеширане в браузъра на потребителя се показва кеширана стара капча, предназначена за съвсем друг потребител. И за потребителя става невъзможно да премине през проверката на капчата.

Сървърното кеширане не пречи на работата на Google reCAPTCHA v2. Това е AJAX капча, която получава задачата за потребителя от сървъра без да се презарежда страницата. Така потребителят получава актуалната си задача, а не кешираната и остаряла задача на друг потребител, както при обикновената капча.

Сървърното кеширане също не пречи на работата на Google reCAPTCHA v3. Тъй като този капча изобщо не взаимодейства с потребителя, а само анализира неговите действия.

Защита от спама с reCAPTCHA v3 и WordPress плагином

Можете добавить Google reCAPTCHA v3 на свой сайт WordPress с помощью плагина. Например, используя плагин Расширенная версия Google reCAPTCHA:

Защита от спама с помощью reCAPTCHA и плагина WordPress

Но, за съжаление, когато добавяте reCAPTCHA v3 на сайта, производителността на сайта значително намалява. Резултатите от тестовете на производителността на сайта можете да видите в раздела „Тестове на производителността на сайта„. Затова, нека добавим reCAPTCHA v3 на сайта без използването на плъгини, особено че това не изисква голямо усилие.

Защита от спама с reCAPTCHA v3 без плагина

Публичен ключ и тайни ключ на reCAPTCHA v3

За да добавите Google reCAPTCHA v3 на уебсайта, трябва първо да получите ключове (публичен и секретен) от Google. Отидете на следния адрес: https://www.google.com/recaptcha/admin/create, изберете типа reCAPTCHA v3, посочете домейн, на който ще бъде инсталирана капчата, и натиснете бутона ИЗПРАТИ.

Защита от спама. Google reCAPTCHA v3. Регистрация сайта.

Публичният ключ (или ключът на сайта) и тайният ключ са получени:

Защита от спама. Google reCAPTCHA v3. Ключове.

Файл functions.php

Отиваме в административната панел на WordPress сайта, на който инсталираме reCAPTCHA v3, и избираме меню Външен вид и подменю Редактор на теми.

Защита от спама. Добавяме reCAPTCHA v3 на уебсайта.

Редактирайте файла functions.php. В края на файла добавете следния код:

/*** Add reCAPTCHA v3 to Comment Section ***/
function add_recaptcha_script() {
    if ( is_singular( 'post' ) ){
        wp_enqueue_script( 'google-recaptcha', 'https://www.google.com/recaptcha/api.js?render=RECAPTCHA_PUBLIC_KEY', array(), null, true );
    }
}
add_action( 'wp_footer', 'add_recaptcha_script' );
function add_recaptcha_jscode () {
    if ( is_singular( 'post' ) ){
        echo '<script>
        document.getElementById("buttonSubmit").onclick = function onClick(e) {
            e.preventDefault();
            grecaptcha.ready(function() {
                grecaptcha.execute("RECAPTCHA_PUBLIC_KEY", {action: "submit"}).then(function(token) { 
                    document.getElementById("g-recaptcha-response").value = token; 
                    document.getElementById("commentform").submit(); 
                });
            });
        }
        </script>';
    }
}
add_action( 'wp_print_footer_scripts', 'add_recaptcha_jscode' );

function add_recaptcha_field($submit_field) { 
    $submit_field['comment_notes_before'] = '';
    $submit_field['submit_field'] = '
        <div>
            <small>This site is protected by reCAPTCHA and the Google <a href="https://policies.google.com/privacy">Privacy Policy</a> and <a href="https://policies.google.com/terms">Terms of Service</a> apply.</small>
        </div>
        <p class="form-submit">
            <input type="submit" name="buttonSubmit" id="buttonSubmit" class="submit" value="'.$submit_field['label_submit'].'">
            <input type="hidden" name="comment_post_ID" value="'.get_the_id().'" id="comment_post_ID">
            <input type="hidden" name="comment_parent" id="comment_parent" value="0">
            <input type="hidden" name="g-recaptcha-response" id="g-recaptcha-response">
        </p>
    '; 
    return $submit_field; 
} 
if (!is_user_logged_in()) { 
    add_filter('comment_form_defaults','add_recaptcha_field'); 
    add_filter('comment_form_default_fields', function($fields) {
        unset($fields['url']);
        unset($fields['email']);
        return $fields;
    });
}
  
function verify_recaptcha_response() {
    $captcha = $_POST['g-recaptcha-response'];
    if(empty($captcha)){ 
        wp_die(__("<b>Spam detected</b>"));
        return;
    }
    $captcha_postdata = http_build_query( 
        array( 
            'secret' => 'RECAPTCHA_PRIVATE_KEY', 
            'response' => $captcha, 
            'remoteip' => $_SERVER['REMOTE_ADDR'] 
        ) 
    ); 
    $captcha_opts = array( 
        'http' => array( 
            'method' => 'POST', 
            'header' => 'Content-type: application/x-www-form-urlencoded', 
            'content' => $captcha_postdata 
        ) 
    ); 
    $captcha_context = stream_context_create($captcha_opts); 
    $captcha_response = json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify", false, $captcha_context), true); 
    if($captcha_response['success'] && $captcha_response['score'] > 0.5){ 
        return; 
    }else{ 
        wp_die(__("<b>Spam detected</b>"));
    }
}
if (!is_user_logged_in()) {
    add_action('pre_comment_on_post', 'verify_recaptcha_response'); 
}

където RECAPTCHA_PUBLIC_KEY е публичен ключ за reCAPTCHA v3, предоставен от Google.

RECAPTCHA_PRIVATE_KEY – това е частният ключ на reCAPTCHA v3, издаден от Google.“

При добавяне на код във файл functions.php, следните са обясненията:

  1. Функция add_recaptcha_script() добавя скрипт reCAPTCHA, само ако текущата страница е пост (is_singular('post')). Добавящият се скрипт reCAPTCHA се намира на адрес: https://www.google.com/recaptcha/api.js?render=RECAPTCHA_PUBLIC_KEY.
  2. add_action( 'wp_footer', 'add_recaptcha_script' ) указва на WordPress, че функцията add_recaptcha_script трябва да се изпълни при извеждането на футъра на страницата. Това позволява да се добави скрипт за reCAPTCHA в футъра на сайта.“
  3. Функцията add_recaptcha_jscode() добавя JavaScript код само ако текущата страница е пост (is_singular('post')). Този JavaScript код обработва кликването върху бутона с идентификатор buttonSubmit. При кликване на бутона се изпълнява следната логика: се отменя стандартното действие (предотвратява се изпращането на формата), след което се изпълнява функцията reCAPTCHA. Токенът на reCAPTCHA се поставя в скритото поле с идентификатор g-recaptcha-response, след което формата с идентификатор commentform се изпраща.
  4. Чрез хука wp_print_footer_scripts функцията add_recaptcha_jscode() ще добави JavaScript код директно в футера на сайта.
  5. Функция add_recaptcha_field() добавя поле reCAPTCHA. То включва бутон за изпращане на коментар с идентификатор buttonSubmit, скрито поле за съхранение на резултата от reCAPTCHA и връзка към политиката за поверителност и условията за ползване на Google. Връзката е необходима, за да се скрие логото на reCAPTCHA, което се появява в долната дясна част на сайта и заема голямо пространство при преглед на сайта на мобилни устройства.
  6. С помощта на кука comment_form_defaults функцията add_recaptcha_field() ще добави полето reCAPTCHA в формата за коментари, но само за неавторизирани потребители на сайта.
  7. Функция verify_recaptcha_response() изпраща заявка към Google reCAPTCHA API (https://www.google.com/recaptcha/api/siteverify) и получава оценка (score) от 0.0 до 1.0. Стойността 0.0 се отнася до робот, а стойността 1.0 се отнася до човек. Заявката за коментар ще бъде одобрена, ако оценката надвишава 0.5. В противен случай се извежда съобщение за открит спам.
  8. С помощта на хука pre_comment_on_post функцията verify_recaptcha_response() се привързва к събитието за изпращане на коментар.

Ето е всичко! Google reCAPTCHA v3 е добавена на сайта.

Скриваме логото на reCAPTCHA v3

Логотипът на reCAPTCHA v3 заема много място на екрана и закрива текста на уебсайта. Това е особено неудобно на мобилни устройства. Вижте как изглежда на мобилно устройство, например iPhone 12 Pro:

Лого Google reCAPTCHA v3

За да не нарушим условията за използване, като скрием логото на Google reCAPTCHA v3, вече сме добавили връзка към политиката за поверителност и условията за обслужване на Google на сайта, когато редактирахме файла functions.php.

За да скриете самият логотип Google reCAPTCHA v3, трябва да добавите следния код в стиловия файл на вашия WordPress сайт: „`css .grecaptcha-badge { display: none; } „`

.grecaptcha-badge { 
    visibility: hidden;
}

В моята тема на WordPress сайта това се прави, като отидете в меню Външен вид, след което в подменю Настройки:

Как да скрия логотипа на reCAPTCHA v3

Следващата стъпка е да изберем настройката Допълнителни стилове и да поставим кода:

Как да скрия логото на Google reCAPTCHA

Готово! Логотип Google reCAPTCHA v3 е скрит.

Оптимизация на сайта за скоростта

Асинхронно зареждане на JS скрипт

Скриптът на reCAPTCHA може да се зарежда асинхронно, т.е. независимо от основния поток на изпълнение на страницата. Асинхронното зареждане на скрипта на reCAPTCHA не влияе на функционалността на самия скрипт, а производителността на сайта се подобрява.

Нека променим зареждането на скрипта на reCAPTCHA на асинхронно, т.е. в изходния код на страницата с reCAPTCHA редът е:

<script src='https://www.google.com/recaptcha/api.js?render=RECAPTCHA_PUBLIC_KEY'>

трябва да бъде заменено със следния ред:

<script src='https://www.google.com/recaptcha/api.js?render=RECAPTCHA_PUBLIC_KEY' async='async'>

Добавете следния код в края на файла functions.php:

function add_async_forscript($url) {
	if (strpos($url, '#asyncload')===false)
        return $url;
    else if (is_admin())
        return str_replace('#asyncload', '', $url);
    else
        return str_replace('#asyncload', '', $url)."' async='async"; 
}
add_filter('clean_url', 'add_async_forscript', 11, 1);

Следващият ред:

wp_enqueue_script( 'google-recaptcha', 'https://www.google.com/recaptcha/api.js?render=RECAPTCHA_PUBLIC_KEY', array(), null, true );

Заменям с низ на ред:

wp_enqueue_script( 'google-recaptcha', 'https://www.google.com/recaptcha/api.js?render=RECAPTCHA_PUBLIC_KEY#asyncload', array(), null, true );

Разликата между редовете във фрагмента #asyncload в URL.

Този код позволява добавяне на асинхронно зареждане на скрипта reCAPTCHA чрез фрагмента #asyncload в URL. Кода обработва този фрагмент в зависимост от контекста (използва се is_admin()) и добавя атрибут async='async' за асинхронно зареждане на скрипта на съответните страници.

В следващата секция на статията ще научим какъв ръст в производителността на сайта дава асинхронното зареждане на скрипта reCAPTCHA.

Тестове за производителност на уебсайта

Производителността на уебсайта беше тествана с помощта на онлайн услугата Google Page Speed https://pagespeed.web.dev/. Представям само резултатите от теста за мобилни устройства. Резултатите за мобилни устройства са по-показателни.

Резултат от тестването на сайта без reCAPTCHA v3:

Производителност на сайта без reCAPTCHA на мобилни устройства

Резултат от тестването на уебсайта с reCAPTCHA v3, инсталирана чрез WordPress плъгин Разширена версия на Google reCAPTCHA:

Производителността на сайта с reCAPTCHA с плъгин на мобилни устройства

Това е резултатът от тестването на сайт с reCAPTCHA v3, инсталирана без плъгин:

Производителността на сайта с reCAPTCHA на мобилни устройства

След проведената оптимизация предишният резултат се подобри:

Производителност на сайта с reCAPTCHA с включена оптимизация за мобилни устройства

Ефективността на защитата срещу спам

Защитата срещу спама, описана в статията, работи на този сайт и вече е показала своята ефективност. През цялото време на използване на reCAPTCHA v3 на сайта не е получено нито един спам нито в коментарите под статиите, нито в електронните писма, изпратени от контактната форма на раздела Контакти на сайта.

Google предоставя интересна статистика за използването на reCAPTCHA на уебсайта (https://www.google.com/recaptcha/admin/).

Защита от спама. Статистика от Google за броя заявки от роботи и реални хора

Броят на заявките – това е броят на заявките към reCAPTCHA v3, направени от уебсайта, за да разпознае потребителите на сайта, дали са роботи или хора. Заявките с висок риск са отбелязани с тъмносиньо, т.е. от роботи-спамери. Заявките с нисък риск са отбелязани със светлосиньо, т.е. от реални хора. На графиката за Разпределение на оценките виждаме ясно разделение: всички роботи-спамери получават минимална оценка (0.1), а реалните хора – максимална (0.9). Такова ясно разделение свидетелства за ефективността на алгоритъма за разпознаване на роботи и хора.

Изводи

Ефективността на описаната защита срещу спам – 100%. Единственият недостатък е леко „забавяне“ на скоростта на зареждане на сайта. Затова тествайте, преценявайте предимствата и недостатъците и вземете решение. А в коментарите, моля, напишете каква защита срещу спам използвате на вашия сайт? Ще е интересно!

Коментари

Вашият коментар

Этот сайт защищен reCAPTCHA, и к нему применяются Google Политика конфиденциальности и Условия использования.

Sign In

Register

Reset Password

Please enter your username or email address, you will receive a link to create a new password via email.