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), естественно, следует заменить так, чтобы он был актуален для Вашей системы.

Posted in Веб-приложения.

Tagged with , .


7 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

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

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

    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 says

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

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

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

  4. Евгений says

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

  5. Аленксей says

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

  6. Валанс says

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

You must be logged in to post a comment.