Отправляет email-рассылки с помощью сервиса Sendsay

Построй свой сайт на PHP!

  Все выпуски  

Построй свой сайт на PHP!


Информационный Канал Subscribe.Ru

Построй свой сайт на PHP!

искать в

Здравствуйте, уважаемые читатели!

Так получилось, что выход рассылки прервался на целый месяц. Вы, возможно, уже гневно бъете ложками по всему, что попадается под руку и кричите: "Ведущего на мыло!". Но на мыло мне еще рано, так что я снова с вами, а это значит, что вы читаете очередной выпуск рассылки "Построй свой сайт на PHP!". Дальше идет наглый пиар сайта http://phpdevelop.info/, так что если вы на дух не переносите пиара, можете дальше вступление не читать.

Те же, кто против пиара не возражает, узнает, что сайт http://phpdevelop.info/ пополнился весьма полезными материалам. Во-первых, в разделе "Загрузка" вас ждет не только определенное количесвто книг по PHP (в том числе и на русском), но и ссылки на закачку PHP-редакторов, чтобы сразу, читая книги, отрабатывать технику на кошках. Также не мешает и скачать интерпритатор PHP, потому что без него, думаю, особенно попрактиковаться не получится. (Если вы не мастер Йода) Ну а если написать свое самое крутое решение с первого раза не получится, то там же вы найдете и ссылки на самые последние (нет, Апокалипсис на завтра не намечается) версии популярных систем управление содержимым. Что касается остального, хочется отметить статью Реализация Front Controller на PHP, запубликованную только вчера.

В общем, вы это, заходите, не стесняйтесь писать всякую ерунду в форумах, чатбоксе. Я буду рад. :-)

Сегодня я предлагаю вам небольшую статейку про пакет PEAR TEXT_CAPTCHA, которая, кстати, уже с неделю как опубликована на http://phpdevelop.info/ ;-)

Ведущий рассылки, The Wanderer. admin@never-invited.com
ICQ:233661333 http://phpdevelop.info/

Защита веб-форм с PEAR Text_CAPTCHA

Автор: Маркус Уитни (Marcus Whitney)
03/31/2005

Если у вас есть публично доступные веб-формы, вы в любой момент можете быть подвергнуты атакам со стороны людей, желающих использовать ваши приложения для собственных целей. Форумы, голосования, гостевые книги и блоги - все это популярные места для роботов, пытающихся сгенерировать неаутентичные сообщения на вашем сайте. Многие сайты, такие как Yahoo, в данный момент используют CAPTCHA. CAPTCHA или "completely automated public Turing test to tell computers and humans apart," ("полностью автоматизированный тест Тьюринга для разделения компьютеров и людей") является проектом Carnegie Mellon School of Computer Science, который предоставляет все необходимое для того, чтобы определить, человек или компьютер инициировал запрос. Технология CAPTCHA позволяет вам отличать человеческие запросы от запросов, сгенерированных компьютером, в вебе, где провести такое различие сложно.

Заметьте: Соответсвенно Wikipedia, Тест Тьюринга - это тест возможности машины вести человекоподобные разговоры.

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

Установка Text_CAPTCHA

Благодаря Кристиану Вензу (Christian Wenz), в PEAR есть пакет, полностью предназначеный для проведения этих тестов как инструментов безопасности на вашем сайте. Пакет Text_CAPTCHA использует функциональность PHP GD для создания динамических изображений со случайными фразами и предоставляет простой объектно-ориентированный интерфейс. Для того, чтобы использовать Text_CAPTCHA, вы должны иметь установленную GD с поддержкой JPEG, PNG и шрифтов TrueType. Для получения дополнительной информации смотрите PHP Image Functions.

Text_CAPTCHA зависит от двух других PEAR пакетов: Image_Text и Text_Password. Он использует Text_Password для генерации случайной фразы, используемой в тесте CAPTCHA и Image_Text для генерации изображения с текстом. Процесс установки Text_CAPTCHA в командной строке следующий:

$ pear install Text_Password
$ pear install Image_Text
$ pear install --alldeps Text_CAPTCHA

Представляем CAPTCHA

Пришло время применить этот пакет в деле. Простой и часто используемый интерфейс для введения этой новой меры безопасности - это форма комментариев в блоге. В этой форме вы обычно запрашиваете имя, e-mail и комментарий от персоны, посылающей сообщение в ваш блог. Форма может выглядеть следующим образом:

<form method="POST" action="">
   Имя: <input type="text" name="name" /><br />
   e-mail: <input type="text" name="email" /><br />
   Комментарий: <textarea name="comment"></textarea>
   <input type="submit" />
</form>

Чтобы применить технологию CAPTCHA, добавьте тэг изображения перед кнопкой отправки формы для проверки, является ли посетитель человеком:

    Пожалуйста, введите текст на изображении ниже: <input type="text"
name="captcha_phrase" /><br />

    <img src="captcha.jpg" />

Здесь Text_CAPTCHA входит в игру. Перед выводом формы инициализируйте Text_CAPTCHA с помощью кода вроде того, что приведен ниже:

<?php
require_once('Text/CAPTCHA.php');
$captcha = Text_CAPTCHA::factory('Image');
$captcha->init(150,150);
?>

Первая строка требует файл Text_CAPTCHA.php. Вторая строка использует фабрику класса Text_CAPTCHA для возврата объекта подкласса Text_CAPTCHA. Дизайн Text_CAPTCHA позволяет создавать CAPTCHA с помощью разных драйверов. Вспомните, CAPTCHA - это технология для отличения людей от компьютеров, а не только для генерации изображений для этого. Аргумент для метода-фабрики Image дает инструкцию Text_CAPTCHA создать объект драйвера Image, чтобы сгенерировать случайное изображение. Третья строка инициализирует объект Text_CAPTCHA и готовит его к использованию.

Фазу инициализации мы обследуем более подробно. Для начала, она принимает два параметра: ширину и высоту случайно сгенерированного изображения. Эти параметры опциональны и имеют значения по умолчанию 200 и 80 соответственно. init() также принимает два дополнительных, опциональных параметра. Первый - это $phrase, который позволяет программисту задать секретную фразу для использования в сгенерированном изображении. Если вы не передаете фразу, init() автоматически создаст фразу с максимальной длинной в восемь символов. Последний параметр - это массив $options, который позволяет вам передавать параметры в объект PEAR Image_Text, которые init() использует для создания изображения с текстом.

Массив $options - это важный параметр для данного применения Text_CAPTCHA, так как эти опции задают используемый шрифт и его размер, а также путь к шрифтам в вашей системе. (Стандартный путь к шрифтам, возможно, не будет работать, пока вы не запустите это руководство на Windows.) Чтобы настроить эти параметры, создайте и передайте массив в метод init(), как следует ниже:

$text_image_options = array(
    'font_size'=>'20',
 'font_path'=>'/path/to/fonts/',
    'font_file'=>'ARIAL.TTF'
);

$captcha->init(150,150,NULL,$text_image_options);

Как только init() создал изображение и фразу, остальной процесс довольно прост. Вы должны создать файл изображения, читабельный для браузера. init() не делает это автоматически. Чтобы получить доступ к изображению, используйте методы доступа getCAPTCHAAsJPEG() или getCAPTCHAAsPNG(), обе из которых возвращают случайно сгенерированное изображение в буфере, так что вы просто можете сделать дамп в свежий файл. Если вы используете PHP4, сделать это можно следующим образом:

  $image_data = $captcha->getCAPTCHAAsJPEG();
  $handle = fopen('captcha.jpg', 'a');
  fwrite($handle, $image_data);
  fclose($handle);

В PHP5 это намного более просто, используя функцию file_put_contents:

  $image_data = $captcha->getCAPTCHAAsPNG();
  file_put_contents('captcha.png',$image_data);

Следующее, что необходимо сделать - это выделить фразу из текущего объекта и сохранить ее в переменной сессии. Если вы еще не создали сессию для данного пользователя, то самое время это сделать:

session_start();

Теперь, используя метод доступа getPhrase() Text_CAPTCHA, присвойте фразу переменной сессии для подготовки к тесту сообщения из формы:

$_SESSION['captcha_phrase'] = $captcha->getPhrase();

Проверка CAPTCHA

Вот и все со стороны формы. Теперь время определить, является ли пользователь человеком или нет. При отправке формы, просто проверяйте, задана ли фраза и совпадает ли она с хранящейся в переменной сессии. Если они совпадают, вы можете продолжить с соответствующим действием POST. Иначе отвергните отправку формы и примените те меры, которые вы считаете подходящими. Следующий код демонстрирует логику проверки теста CAPTCHA:

<?php
  session_start();
  if (isset($_POST['captcha_phrase']) &&
      $_POST['captcha_phrase'] == $_SESSION['captcha_phrase'])
  {
    // операции по публикации
  }
  else {
    // проверка безопасности
  }
?>

Завершение

CAPTCHA может быть хорошим способом ограничить количество успешных, но нежелательных HTTP POST-запросов в вашем приложении. Text_CAPTCHA предоставляет подходящий объект для реализации этой функциональности. В данный момент, пакет находится в состоянии альфа, и поэтому не является официально годным для продуктивных сайтов. Так или иначе, он близок к прекрасному началу и привносит сознание безопасности PEAR, что всегда ценится. Счастливого CAPTCHA-инга!

Об авторе

Маркус Уитни (Marcus Whitney) - главный архитектор Emma, приложения, на котором построена почта более 1000 организаций по всему свету с офисами в Нью-Йорк Сити (New York City) (откуда он родом) и Нэшвила (Nashville) (где он живет). Когда он не работает в Emma, о забавляется как евангелист и преподаватель профессиональной разработки на PHP. Он глава PHP Security Consortium, организатор Группы Пользователей PHP Нэшвила (Nashville PHP Users Group), и автор грядущей книги по профессиональному програмированию на PHP 5 от издательства Apress.

 
Copyright © 2004-2005 Построй свой сайт на PHP!
Перепечатка возможна только с сохранением авторства.
Выпуск #9: 2005-06-02

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.phpdev
Отписаться
Вспомнить пароль

В избранное