Ох, уж этот спам, ох уж эти спамеры! Как же вы всем надоели, и как хочется, чтобы весь ваш софт для спама заглючил раз и навсегда.
Хорошие желания, но не осуществимые, поэтому защищаться от спама будем сами. И как я недавно обнаружил, защититься от спама можно даже без каптч и плагинов. Как это?
Как защитить Вордпресс от спама раз и навсегда?
Наверняка у вас стоит на сайте какой-нибудь плагин для защиты от спама, типа Akismet Anti-spam, но уверен, вы продолжаете получать спамные комментарии, типа таких:
И все бы ничего, можно иногда и почистить и отклонить, если бы на один мо сайт спамеры не стали добавлять комментарии, обходя защиту предмодерации! Как это они делают, даже не знаю.
Но это заставило меня найти решение, которое бы избавило меня от этой заразы раз и навсегда. И такое решение нашлось, держите код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
// Защита комментариев от спама, нужно быть на странице 15 секунд add_filter( 'comment_form_default_fields', 'add_antispam_field_to_comment_form' ); add_filter( 'comment_form_fields', 'add_antispam_field_to_comment_form' ); function add_antispam_field_to_comment_form($fields) { $fields['csrf'] = ' <input type="text" name="csrf" required style="display:none"> <script>document.getElementsByName("csrf")[0].value="'.time().'"</script>'; return $fields; } add_action( 'pre_comment_on_post', 'action_check_hidden_field' ); function action_check_hidden_field( $comment_post_ID ){ if (current_user_can('manage_options')) { // Если пользователь - администратор, пропускаем проверку return; } $human_pause = 15; if (!isset($_POST['csrf']) || ((time() - intval($_POST['csrf'])) < $human_pause) || !preg_match('/\d{10}/',$_POST['csrf'])) { echo '<html><head><meta http-equiv="refresh" content="5;url=https://aliprofi.ru/links/aliexpressdesctop"></head><body>'; echo '<style> body { margin: 0; display: flex; justify-content: center; align-items: center; height: 100vh; font-family: Arial, sans-serif; background-color: #f4f4f4; } .message-container { text-align: center; padding: 20px; border: 2px solid #ccc; background: white; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); border-radius: 10px; } h1 { color: #333; } p { color: #666; } </style>'; echo '<div class="message-container">'; echo '<h1>Привет, спамер!</h1>'; echo '<p>Вы будете перенаправлены на мой любимый сайт :)</p>'; echo '</div>'; echo '<script>setTimeout(function(){ window.location.href = "https://aliprofi.ru/links/aliexpressdesctop"; }, 5000);</script>'; echo '</body></html>'; exit; } } function remove_form_novalidate() { remove_theme_support( 'html5' ); } |
Суть проста: никто не может оставить комментарий раньше чем через заданное в коде время после посещения станицы!
Спамеры не оставляют комментарии вручную, прочитав статью, они делают это специальными программами, которые буквально рассылают спам.
И тут простая и гениальная защита: все мгновенные комментарии просто не могут пройти, а значит и спамеры в пролете, как муха в самолёте 🙂
В коде можно выставить время, спустя которое человек может оставить комментарий (у меня стоит 15 секунд, этого достаточно, чтобы человек хотя бы вскользь прочитал статью), но вы можете поставить свое.
Если кто-то попытается оставить комментарий раньше 15 секунд, он получит отказ сервера и его перебросит по моей реферальной ссылке на Алиэкспресс. Ибо нечего 🙂
Вот так и живем. Проверил на двух сайтах, отключив все антиспам плагины. Спама стало НОЛЬ! Попробовал сам оставить комментарий - все работает.
Благодарите в комментариях...