19.02.2011


Ставим CAPTCHA на отсылку комментариев


Категории: Стороннее,Сторонний софт — Метки: , — Administrator

Если кто не знает, что такое KCAPTCHA, то смотрите вот по этой ссылке.
Кратко: KCAPTCHA — это механизм, который помогает при заполнении и отсылке форм с данными отсечь спам-роботов с хорошей эффективностью. Впервые мы столкнулись со спам-роботами, когда начали использовать WORDPRESS. Это выглядело примерно так: когда создавалась страница или запись в WordPress, на нее натыкался какой-то поисковый робот, определял в разметке блок формы комментариев и, зная структуру формы, спам-робот начинал слать раз в сутки, а иногда и чаще комментарии к записи.

Для чего это нужно? Дело в том, что не все люди, которые используют WORDPRESS включают опцию обязательной модерации комментариев. Т.е., можно оставить комментарий к записи и он будет тут же опубликован, вместе с комментарием отображается в большинстве случаев и сайт того, кто этот комментарий оставил. Таким образом, при публикации ссылки на сайт комментатора вы поднимаете его рейтинг в поисковых системах. Это и является целью спам-роботов. У нас автоматическая публикация комментариев была выключена, и комментарии должны были проходить модерацию, спустя какое-то время количество комментариев от спам-роботов стало очень большим, вот тогда и вспомнились цифирки подтверждения каких-то действий на других сайтах, просмотр кода страниц таких сайтов вывел нас на KCAPTCHA, технология оказалась простой и удобной, и после ее установки спам пропал начисто. Пример работы KCAPTCHA вы можете увидеть внизу этой страницы.

Установка

На странице проекта KCAPTCHA вы можете найти более новую версию, если Вам не хочется туда заходить, то можете сразу взять нашу рабочую версию по этой ссылке. В этом архиве вы найдете дистрибутив и наш работающий файлик qq.php, это просто копия файла index.php, собственно он и формирует изображение для символов. В то, как работает KCAPTCHA мы не вникали, если у вас есть желание, то вперед, все тексты есть, мы же просто поменяли конфигурацию под три обычных цифры на картинке. В архиве упакована папка с софтом, вам необходимо распаковать это на вашем хостинге. Где распаковывать, решайте сами, вопрос доступа к файлам из WORDPRESS достаточно непростой и здесь нет смысла пытаться его разрешить и дать точные рекомендации, если файлы будут не видны, вы легко обнаружите ошибку по ссылкам на них из интерфейса WORDPRESS.
Внесите следующие изменения в файлы, перечисленные ниже.

header.php

Этот файл находится в папке активной схемы wordpress. Поместите эту строку в самый первый блок кода PHP, если его нет, то создайте в самом начале файла, у нас это примерно выглядит так:

<?php
/**
* @package WordPress
* @subpackage Classic_Theme
*/
  session_start(); // –– !!! надо вставить эту строку !!!
  global $menu_code;

comments.php

Этот файл содержит форму для отсылки комментариев. Для каждой схемы WORDPRESS он свой, поэтому подходите к его изменению творчески, у нас изменения выглядят так:

<!–– Это область для ввода комментария ––>
<p><textarea name="comment" id="comment" cols="100%" rows="10" tabindex="4"></textarea></p>
<!–– Нами исправлена разметка и добавлен вызов картинки Captcha c полем подтверждения ––>
<div align="center">
  <table>
    <tr>
      <td style="vertical–align: middle; padding: 5px;"><div style="font–size: 0.8em;">Укажите 3 цифры</div></td>
      <td style="padding: 5px;"><img id="kcapImage" style="border: 1px solid black;" src="../kcaptcha/qq.php?<?php echo session_name()?>=<?php echo session_id()?>"></td>
      <td  style="vertical–align: middle; padding: 5px;"><input name="keystring" id="keystring" type="text" style="width:50px;" tabindex="5" /></td>
      <td  style="vertical–align: middle; padding: 5px;">
        <input name="submit" type="submit" id="submit" tabindex="6" value="Отослать" style="width: 100px; vertical–align: middle;" /> 
      </td>
    </tr>
  </table>
</div>

<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />

<?php do_action('comment_form', $post–>ID); ?>

</form>

functions.php

В самом верху файла вставьте следующую строку:

add_filter( ‘preprocess_comment’ , ‘check_kcaptcha’ , ’01’ );

Эта строка включает фильтр для события записи комментария в базу данных. Про фильтры и события смотрите дополнительно информацию на нашем сайте. Вкратце происходит следующее:
данная строка включает обработчик (функцию check_kcaptcha, название можете изменить на нужное вам) в момент, когда когда комментарий должен быть записан в базу данных, если произойдет что-то не так, то в вызываемой функции это можно будет отменить.
В этот же файл добавьте следующую функцию:

function check_kcaptcha ( $data ) {
  session_start();
  if (!(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring'])) {
    wp_die('Ошибка !!! Пожалуйста, введите правильно цифры.  Для возврата к странице используйте функцию "Back" ("Назад") броузера');
  }
  return $data;
}





Календарь


Архив