Создание капчи (captcha) на PHP

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

Капча (captcha) представляет из себя изображение с некоторым текстом, который предлагается набрать пользователю в поле ввода для подтверждения его "человечности". Дело в том, что человеку одинаково легко читать текст, независимо от того, является ли он непосредственно машинным текстом или изображением. В то время как компьютеру требуется гораздо более сложный алгоритм для "чтения" текста в виде картинки. Очевидно, что капча каждый раз должна отображать случайную последовательность символов.

Капчи используются, как правило, при заполнении каких-либо форм на сайте. Алгоритм работы следующий: на форме присутствует изображение-captcha с некой случайной последовательностью символов. Рядом с ним имеется поле для ввода содержимого капчи пользователем. Изображение, по сути, является PHP-скриптом, который его формирует. При этом сгенерированное текстовое содержимое капчи где-то сохраняется. При отправке формы скрипт сравнивает сохраненное значение капчи с тем, что ввел пользователь. Если значения совпадают, то запрос принимается, иначе отклоняется.

Шаблонизация в веб-программировании. Создание шаблонизатора на PHP

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

Первые работы начинающего веб-программиста выглядят, как правило, примерно так:

echo '<div class="post_entry">';
echo '<h2>' . $article['title'] . '</h2>';
echo '<div class="date">' . $article['date'] . ' &bull; Категория: <a href="/' . $article['category_alias'] . '/' . $article['article_alias'] . '">' . $article['category'] . '</a></div>';
echo $article['text'];
echo '</div>';

Код выше выводит оформленный блок статьи на сайте, данные, по всей видимости, берутся из базы данных (массив article), каркас страницы "жестко" вписан в код в виде строковых констант. Выглядит это очень некрасиво, не правда ли? Все из-за того, что каркас страницы и ее данные перемешаны в PHP-коде. Такой код очень неудобен как в плане чтения, так и в плане редактирования.

Урок 12: Установка CMS Drupal

Сегодня мы познакомимся с CMS Drupal. Если честно, мне никогда не приходилось с ним работать, поэтому сейчас я вместе с вами буду устанавливать его впервые. Могу озвучить лишь распространенное в сети мнение, что Drupal наиболее сложен в конфигурировании по сравнению с Joomla и Wordpress.

Попробуем запустить Drupal под нашим локальным веб-сервером. Переходим на страницу загрузки Drupal и скачиваем архив последней версии Drupal. В моем случае это был Drupal 7.8 (версия от 31.08.2011), имя архива, соответственно, drupal-7.8.tar.gz. Этот архив нужно распаковать в корневую директорию одного из виртуальных хостов Apache. Я, допустим, выбрал C:\Program Files\Apache\htdocs\test-domain1\www (виртуальный хост test-domain1).

Пробуем открыть в веб-браузере главную страницу:

Основы безопасного веб-программирования на PHP

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

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

  • GET и POST-данные. Конечно же, данные передаваемые пользователем в виде GET и POST-параметров. Это самый распространенный источник внешних данных, соответственно, самая большая доля уязвимостей приходится на него;
  • Куки. Те же пользовательские данные, другой метод их передачи;
  • Данные из БД. Запрашиваемые скриптом данные из базы данных;
  • Внешний контент. Внешний контент, который скрипт загружает в процессе работы. Например, сторонняя RSS-лента новостей и тому подобное.

Урок 11: Установка CMS WordPress

WordPress — еще одна очень популярная CMS, используемая преимущественно для создания блогов. Сегодня попробуем ее установить на наш локальный веб-сервер. Напоминаю, что все эксперименты на этом ресурсе проделываются на соответствующим образом настроенной связке Apache + PHP + MySQL (все о ней можно найти здесь).

Итак, идем на сайт ru.wordpress.org и скачиваем zip-архив последней версии WordPress. В моем случае файл назывался wordpress-3.2.1-ru_RU.zip. Распаковываем архив в корневой каталог любого виртуального хоста Apache (предварительно очищенный). Я выбрал test-domain3, корневой каталог, соответственно, C:\Program Files\Apache\htdocs\test-domain3\www. Обратите внимание, что архив содержит папку wordpress, в которой уже находятся файлы CMS. Необходимо в корневом каталоге разместить именно эти файлы, а не папку wordpress.