Skip to content


Внедряем Captcha в CuteNews

captcha exampleЗащита от спама сейчас - просто необходимый элемент любого сайта, где присутствует возможность заполнения каки-либо форм (будь то форма для обратной связи с автором, либо форма добавления ссылки в каталог ссылок или еще что-то подобное). Одним из наиболее эффективных способов противодействия появлению спама на веб-страницах является CAPTCHA (расшифровывается как Completely Automated Public Turing test to tell Computers and Humans Apart) т.е. одна из разновидностей теста Тьюринга. Пример такого теста в достаточно жеcтком для пользователя варианте :) приведен на картинке слева.

Порядок установки CAPTCHA в новостной скрипт CuteNews.

  1. Добавляем в файл data/Default.tpl в код формы ввода комментария $template_form (примерно 62-ая строка):
    data/Default.tpl
    1. Текст на картинке: <input type='text' name='captcha' />
    2. <img src='captcha.php' alt='picture with code' /><br />

    Полная версия кода формы у меня получилась такая:

    1. $template_form = <<<HTML
    2. <table border="0" width="500" cellspacing="0" cellpadding="2" style="margin-bottom: 20px">
    3. <thead style="background: rgb(239,244,11); text-align: center">
    4. <tr><td colspan="2"><span style="font-size: 12pt">Оставить комментарий</span></td></tr>
    5. </thead>
    6. <tr><td height="5" colspan="2"></td></tr>
    7. <tr><td width="20%">Имя:</td><td><input type="text" name="name" tabindex="1"></td></tr>
    8. <tr><td>E-mail:</td><td><input type="text" name="mail" tabindex="2"></td></tr>
    9. <tr><td colspan="2"> <textarea style="width: 100%" rows="8" name="comments" tabindex="3"></textarea><br /></td></tr>
    10. <tr><td colspan="2"><div style="margin-top: 10px; float: left">Введите цифры с картинки: <input tabindex="4" type="text" name="captcha" size="10" /></div>
    11. <img src="captcha.php" alt="picture with code" valign="middle" /></td></tr>
    12. <tr><td colspan="2" align="center"><input tabindex="5" type="submit" name="submit" value="Добавить комментарий" accesskey="s"></td></tr></table>
    13. HTML;
  2. Положить в корень сайта файлы captcha.php и Comic_Sans_MS.ttf. Взять их можно тут.
  3. Поправить файл inc/shows.inc.php, добавив в него начиная примерно со 172-ой строки следующее:
    inc/shows.inc.php
    1. @session_start();
    2. if (! (isset($_SESSION["captcha"]) && $_SESSION["captcha"]===$_POST["captcha"]) ) {
    3.  echo "<div align=\"center\" style=\"font-size: 16px; color: red\">
    4. Текст с картинки введен НЕВЕРНО<br/><br/>
    5. <a href=\"javascript:history.go(-1)\">Вернуться назад</a></div>";
    6.  $CN_HALT = TRUE;
    7.  break 1;
    8. }
    9. unset($_SESSION["captcha"]);
  4. Поудалять из файла site/data/comments.txt спам-комментарии, которые попали туда до того, как была прикручена captcha :)

Чтобы эта версия captcha работала, PHP должен быть сконфигурирован со следующими опциями (актуально для версии 5.3.0):
−−with-gd=/usr
−−enable-gd-native-ttf
−−with-freetype-dir=/usr
−−with-zlib
−−with-zlib-dir=/usr

Путь к библиотекам (/usr), естественно, следует заменить так, чтобы он был актуален для Вашей системы.

.

Размещено в категории Веб-приложения. Теги: , .

Комментариев: 7

Чтобы быть всегда в курсе здесь происходящего, Вы можете подписаться на RSS feed для комментариев на эту заметку.

  1. александр said

    Все сделал как тут написано, работает. но есть косяк. вот что пишет после нажатия кнопки Добавить.

    Warning: fopen(/home/matri177/domains/progressdk.ru/public_html/index_news/data/flood.db.php) [function.fopen]: failed to open stream: Permission denied in /home/matri177/domains/progressdk.ru/public_html/index_news/inc/functions.inc.php on line 334

    Warning: fclose(): supplied argument is not a valid stream resource in /home/matri177/domains/progressdk.ru/public_html/index_news/inc/functions.inc.php on line 345

    Warning: fopen(/home/matri177/domains/progressdk.ru/public_html/index_news/data/ipban.db.php) [function.fopen]: failed to open stream: Permission denied in /home/matri177/domains/progressdk.ru/public_html/index_news/inc/shows.inc.php on line 145

    Warning: fwrite(): supplied argument is not a valid stream resource in /home/matri177/domains/progressdk.ru/public_html/index_news/inc/shows.inc.php on line 167

  2. Admin said

    Значит в functions.inc.php в строке 334 идет попытка обращения к какому-то ресурсу, доступ к которому для скрипта ограничен. Более подробно сказать не могу, так как доступа к Вашему хостингу не имею - надо смотреть код.

  3. александр said

    Огромное вам спасибо! Все сделал, все работает!

  4. Евгений said

    Спасибо большое, очень выручили)

  5. Аленксей said

    День добрый! А можно хотя бы пример самого файла shows.inc.php. Понятно что вроде все разжевано, но как то не клеится... СПасибо

  6. Валанс said

    не отображается картинка капи(

Some HTML is OK

(required)

(required, but never shared)

, или ответить через trackback.

Страница 1 из 11