Сышышь ты, выходи сюда,
поговорим !

Главная Новости

Защита от спама в WordPress без плагинов

Опубликовано: 23.04.2018

видео Защита от спама в WordPress без плагинов

Эффективная защита от спама для Contact form 7

Почти 9 лет назад я опубликовал статью о " защите от спама " путем подмены полей. Этот метод и сейчас работает идеально, Akismet вылавливает лишь штук 5 ручных спамных комментариев в месяц, а весь автоматический спам не доходит до него вовсе. Я до сих пор удивляюсь, когда захожу в админку какого-нибудь клиентского сайта и вижу там тысячи спамных комментов. Как среди такой горы мусора можно найти комментарий, который попал в спам по ошибке? В данной обновленной версии этого хака больше не требуется править файлы движка – один раз настроили и больше ничего делать не надо.



Метод подмены полей заключается в том, что мы скрываем настоящее поле для ввода комментария ' comment ' и подсовываем вместо него новое поле ' real-comment '. Для посетителей блога все останется, как прежде и они не заметят никакой разницы, а вот спам-скрипты будут пытаться заполнить стандартное поле ввода комментария со стандартным его именем ' comment '. Ведь скрипт не понимает, что человек не может заполнить текстовое поле, которое он не видит на странице. Спамный комментарий определяется именно по заполненности невидимого для нормальных посетителей поля.


17.Защита от спама в WordPress

По пунктам:

1 Добавляем в форму комментирования свое собственное поле 'real-comment'. Для этого откройте файл темы functions.php и добавьте туда код:

//добавляем поле 'real-comment' start function wph_add_new_comment_field ( $args ) { if ( preg_match ( '/<textarea.*textarea>/' , $args [ 'comment_field' ] , $match ) ) { $textarea = $match [ 0 ] ; $real_textarea = str_replace ( 'comment' , 'real-comment' , $textarea , $count ) ; if ( $count ) { $hidden_textarea = str_replace ( '<textarea' , '<textarea style="display:none;"' , $textarea ) ; $hidden_textarea = str_replace ( 'required="required"' , '' , $hidden_textarea ) ; $hidden_textarea = str_replace ( 'aria-required="true"' , '' , $hidden_textarea ) ; $args [ 'comment_field' ] = str_replace ( $textarea , "$hidden_textarea$real_textarea" , $args [ 'comment_field' ] ) ; } } return $args ; } add_filter ( 'comment_form_defaults' , 'wph_add_new_comment_field' , 30 ) ; //добавляем поле 'real-comment' end

//добавляем поле 'real-comment' start function wph_add_new_comment_field($args) { if (preg_match('/<textarea.*textarea>/', $args['comment_field'], $match)){ $textarea = $match[0]; $real_textarea = str_replace('comment', 'real-comment', $textarea, $count); if ($count) { $hidden_textarea = str_replace( '<textarea', '<textarea style="display:none;"', $textarea ); $hidden_textarea = str_replace( 'required="required"', '', $hidden_textarea ); $hidden_textarea = str_replace( 'aria-required="true"', '', $hidden_textarea ); $args['comment_field'] = str_replace($textarea, "$hidden_textarea$real_textarea", $args['comment_field']); } } return $args; } add_filter('comment_form_defaults', 'wph_add_new_comment_field', 30); //добавляем поле 'real-comment' end


Защита сайта WordPress от спама, плагин Akismet

Теперь на странице добавления комментариев у вас будет 2 одинаковых поля для ввода комментария с разными именами, причем стандартное поле 'comment' скрыто от глаз посетителей и они его заполнить никак не могут.

2 Теперь встроим проверку на заполненность стандартного поля 'comment'. Для этого откройте файл темы functions.php и добавьте туда код:

//проверка на спам start function wph_verify_spam ( ) { if ( false === strpos ( $_SERVER [ 'REQUEST_URI' ] , 'wp-comments-post.php' ) ) return ; if ( ! empty ( $_POST [ 'comment' ] ) ) wp_die ( 'Спаму нет!' ) ; $_POST [ 'comment' ] = $_POST [ 'real-comment' ] ; } add_filter ( 'init' , 'wph_verify_spam' ) ; //проверка на спам end

//проверка на спам start function wph_verify_spam() { if(false === strpos($_SERVER['REQUEST_URI'], 'wp-comments-post.php')) return; if(!empty($_POST['comment'])) wp_die('Спаму нет!'); $_POST['comment'] = $_POST['real-comment']; } add_filter('init', 'wph_verify_spam'); //проверка на спам end

На этом все, больше автоматический спам вас не побеспокоит. Проверить работу данного хака очень легко – достаточно в первом коде убрать ' display:none; ', обновить страницу, заполнить оба поля для ввода комментария и попытаться опубликовать ваш комментарий.

Данный хак хорош по двум причинам: абсолютно никакого спама и при этом нет необходимости обновлять хак при выходе новых версий WordPress .

PS. Это обновленная версия хака, которая будет работать на WordPress версии 4.4 и выше (никаких проблем с плагинами вроде WooCommerce и прочими). За подсказку с новым кодом большое спасибо Тимуру Камаеву .

rss