It Hints
Search
Close this search box.

Всем при­вет. На одном из моих про­ек­тов на име­ют­ся фор­мы создан­ные при помо­щи cform7, через кото­рые в почту при­хо­дит про­сто неимо­вер­ное коли­че­ство СПАМа.

Вы ска­же­те — так есть же Google кап­ча ! И в прин­ци­пе буде­те пра­вы, но …

Так как эта фор­ма исполь­зу­ет­ся кли­ен­та­ми, то реше­ние с Google кап­чей ока­зы­ва­ет­ся не совсем удоб­ным, пото­му что есть какой то про­цент лож­ных сра­ба­ты­ва­ний и в таком слу­чае поль­зо­ва­те­лю при­дет­ся выби­рать из кар­ти­нок какие нибудь гид­ран­ты, вело­си­пе­ды или пеше­ход­ные пере­хо­ды со све­то­фо­ра­ми, что лич­но меня очень раз­дра­жа­ет. В иде­а­ле хоте­лось сде­лать так что­бы СПАМ с помо­щью ботов отсе­кал­ся авто­ма­том, а руч­ной СПАМ был бы гемо­рой­ным и бес­смыс­лен­ным для СПА­Ме­ров. Akismet тоже отпал, т.к. он плат­ный — бес­плат­ный он толь­ко для неком­мер­че­ских сайтов.

Про­ана­ли­зи­ро­вав кучу СПАМ­ных сооб­ще­ний выявил закономерность:

  1. Во пер­вых 90% СПАМ сооб­ще­ний содер­жат ссыл­ки на левые сайты
  2. СПАМ в прин­ци­пе не быва­ет в пару строк, т.е.  типич­ное СПАМ сооб­ще­ние в дли­ну име­ет боль­ше сим­во­лов чем вопрос от клиента.
  3. Когда Ваша фор­ма содер­жит толь­ко поля Имя и теле­фон, СПАМ обя­за­тель­но напи­шут в поле Имя.
  4. Авто СПАМ (это когда СПАМ рас­сы­ла­ют боты) запол­ня­ют все поля, что­бы прям 100% всё отправилось
  5. Имя у СПАМ ботов в 99% слу­ча­ев на англий­ском — типа RodneyLiand, Richardkek, MichaelJem и т.д. имён может быть мил­ли­он но они все на английском.

И так : Вра­га изу­чи­ли, пора действовать.

  1. Пер­вым делом огра­ни­чи­ва­ем поле имя от 3х до 20 сим­во­лов. В ито­ге поле Имя ста­ло выгля­деть так: [text your-name minlength:3 maxlength:20 placeholder “Ваше имя”]
  2. Поле вопрос огра­ни­чи­ва­ем до 140 сим­во­лов. У меня полу­чи­лось вот так: [textarea your-message maxlength:140 placeholder “Крат­ко опи­ши­те Ваш вопрос или пожелания”]
  3. Далее ста­вим пла­гин Honeypot for Contact Form 7 он дела­ет неви­ди­мое для посе­ти­те­лей поле, кото­рое СПАМ боты “видят” и обя­за­тель­но запол­нят (они запол­ня­ют все поля) и если это поле запол­не­но, то сооб­ще­ние отправ­ле­но не будет. После уста­нов­ки в фор­му добав­ля­ем : [honeypot имя_поля]
  4. И послед­нее, запре­ща­ем англий­ские сим­во­лы в Име­ни. Сде­лать это мож­но про­пи­сав в файл function.php вышей темы следующее:
function my_wpcf7_validate_text( $result, $tag ) {
$type = $tag['type'];
$name = $tag->name;
$Name = (strpos(strtolower($name), 'name') !== false)?true:false;
$value = isset( $_POST[$name] ) ? (string) $_POST[$name] : '';
if ( $tag->is_required() && empty($value) ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_required' ) );
} elseif ( $Name && (!preg_match('/^[А-Яа-яё]+$/iu', $value) || strlen ($name)<2)) { $result->invalidate( $tag, wpcf7_get_message( 'invalid_name' ) );
}
return $result;
}
add_filter( 'wpcf7_validate_text', 'my_wpcf7_validate_text' , 10, 2 );
add_filter( 'wpcf7_validate_text*', 'my_wpcf7_validate_text' , 10, 2 );
add_filter( 'wpcf7_messages', 'mywpcf7_text_messages' );
function mywpcf7_text_messages( $messages ) {
return array_merge( $messages, array(
'invalid_name' => array(
'description' => __( "Используйте только РУССКИЕ символы в имени", 'contact-form-7' ),
'default' => __( 'Используйте только РУССКИЕ символы в имени.', 'contact-form-7' )
)
));
}

На этом пер­во­на­чаль­ную СПАМ обо­ро­ну мож­но счи­тать настро­ен­ной: нам не смо­гут писать СПАМ в поле Имя, нам не смо­гут писать длин­ные сооб­ще­ния, что при­су­ще СПА­Му и у нас будет отсе­кать­ся весь СПАМ отправ­лен­ный ботами.

Борьба со СПАМом в Cform7

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

Facebook
Twitter
Email
VK
WhatsApp
Telegram