Добавляем CAPTCHA к форме. Пример PHP скрипта, использующего AJAX.

Владимир | | Ajax, CodeIgniter, JavaScript.

Логотип CAPTCHA
О том, что такое CAPTCHA и зачем она нужна, думаю рассказывать не нужно. Все, кто хоть раз регистрировался на каком-нибудь интернет-сервисе, прекрасно понимают, о чем идет речь.

В этой статье мы посмотрим, как создать несложную CAPTCHA, добавить ее к форме, и проверить правильно ли посетитель ввел ее значение. Посмотреть действующий пример можно здесь.

Сразу хочу отметить, что речь пойдет именно о работе с CAPTCHA, а не о создании рисунка для нее.

Поэтому мы используем готовую библиотеку для создания рисунка CAPTCHA. Библиотека называется достаточно незамысловато – captcha и может использоваться вместе с фрэймворком CodeIgniter. В описании библиотеки приведен пример ее использования на обычной странице, поэтому мы рассмотрим вариант проверки с применением технологии ajax.

Переходим к решению нашей задачи. Прежде всего, необходимо четко понимать, чем работа с captcha отличается от работы с обычным полем.
Читать дальше

Web сервисы. Компас для CodeIgniter

Владимир | | CodeIgniter.

Компас
За последнее время появилось несколько неплохих сборников ссылок на ресурсы о CodeIgniter.

Это, прежде всего, статья CodeIgniter Framework Геннадия Потапова, а также Сайты по CodeIgniter Максима.

К сожалению, информации о CodeIgniter на русском языке не так много как хотелось бы, поэтому появление таких списков можно только приветствовать 🙂 .

Я тоже решил поучаствовать и сделал свою версию списка.

Естественно собраны далеко не все ресурсы, поэтому я готов выслушать любые предложения и замечания.

P.S. Список я разместил на moikompas.ru. Кстати, очень интересный проект, который изначально задумывался как сборник ссылок на ресурсы по конкретным темам.
На данный момент «компасов» не много, но в перспективе может получится очень полезный ресурс.

Сколько нужно резервных копий?

Владимир | | Разное.

Сразу скажу правильный ответ: «Сколько не делай, все равно будет мало!» 🙂

И самое паршивое то, что проблемы возникают в самый неподходящий момент.

Как раз такая ситуация у меня и возникла. 12-ого февраля все было нормально, а 13-ого я увидел, что в блоге не хватает двух последних записей.

Проблема была с сервером хостера («разрушилась файловая система» — по их словам). Данные были восстановлены по резервной копии за 10-ое февраля.

Недостающие статьи я, конечно, быстро восстановил (кроме резервных копий блога я отдельно сохраняю все вордовские файлы, картинки, исходники и т.п.).

Но вот с комментариями оказалось сложнее. Какие-то я восстановил, а какие-то – мог пропустить. За что я прошу прощения у их авторов.

Поэтому если вы вдруг не увидите своего комментария, просто отправьте его еще раз.

Вместо заключения.

Ситуация, безусловно, неприятная, но очень поучительная. Нельзя переоценивать свои силы и быть слишком уверенным в себе 🙂 .

Естественно, я пересмотрю подход к созданию резервных копий.

И еще раз прошу прощения за потерянные комментарии.

P.S. Очень неплохо в этой ситуации показала себя служба FeedBurner. Все, подписчики RSS ленты получили полный текст всех статей даже после восстановления из резервной копии (кстати, еще один повод подписаться на RSS 🙂 ).

PHP framework CodeIgniter. Авторизация посетителей и ограничение доступа

Владимир | | CodeIgniter, PHP.

Авторизация посетителей

С вопросами безопасности web ресурсов постоянно сталкивается каждый разработчик. И, естественно, в этой области существует масса решений. В этой статье я хочу рассказать о встроенных возможностях фрэймворка CodeIgniter, которые можно использовать для авторизации посетителей и ограничения их доступа.

Прежде всего, вкратце обрисую сложившуюся ситуацию.

Большинство web ресурсов используют для защиты пару «имя — пароль». Это не самый безопасный вариант, но зато удобный (простой) в использовании.

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

Об аппаратной защите (вроде биометрических датчиков и т.п.) и говорить не приходиться. Эти устройства стоят денег и, зачастую, немаленьких.

Поэтому, метод авторизации с помощью имени и пароля, похоже, останется самым распространенным в обозримом будущем.

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

Естественно, этот подход далеко не самый лучший, т.к. код проверки формы будет дублироваться на каждой странице.
Читать дальше

CodeIgniter + AJAX. Проверка данных форм без перезагрузки страниц

Владимир | | Ajax, CodeIgniter, PHP.

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

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

Давайте немного порассуждаем. Чем отличается ajax запрос от обычного запроса?

1) Ajax запрос можно выполнить только с помощью JavaScript.

2) Ответом сервера на обычный запрос должна быть html страница, а на ajax запрос – фрагмент данных (с разметкой или без нее).

Отсюда вывод. Чтобы добавить поддержку ajax нужно в клиентской части написать JavaScript функцию, которая прочтет данные из формы, отправит запрос и обработает ответ сервера, а в серверной части – изменить возвращаемые значения.

Примечание. Чтобы немного упростить себе жизнь, мы будем использовать библиотеку prototype для отправки запросов и обновления страницы.

Переходим к нашему примеру. Как вы помните, в прошлый раз мы создали форму с тремя полями для ввода личных данных пользователя (ник, полное имя, адрес email).

В этот раз мы используем эту же форму, только немного изменим html разметку.
Читать дальше

PHP framework CodeIgniter. Проверка данных из форм

Владимир | | CodeIgniter, PHP.

Проверка данных форм

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

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

Практически каждый фрэймворк предлагает свое решение этой задачи. И CodeIgniter тут не исключение. Возможно, его решение не идеальное, но, тем не менее, достаточно эффективное и удобное в использовании.

Рассмотрим небольшой пример. Допустим, у нас есть страница (userdata) с формой, содержащей поля для ввода личных данных. Если посетитель правильно заполнил форму, мы должны отправить его на главную страницу сайта (index). Если были допущены ошибки – показать их описание и предложить заполнить форму еще раз.

Естественно, доступ к обеим страницам осуществляется через контроллер, а их адреса выглядят так: www.site.com/index.php/main/index и www.site.com/index.php/main/userform.

Примечание. Подробнее почитать о навигации в CodeIgniter можно в статье «CodeIgniter: контроллер и представления».
Т.е. на данном этапе контроллер выглядит так:
Читать дальше

PHP framework CodeIgniter. Создание многоязычных сайтов

Владимир | | CodeIgniter, PHP.

Локализация сайта
В этой статье речь пойдет о возможностях, которые предоставляет CodeIgniter для поддержки многоязычных сайтов.

Разберемся, как реализована поддержка языков.

Идея очень простая. Вы определяете, какие фразы должны быть переведены и создаете файлы с переводами.

После этого, даете возможность пользователю выбрать язык и загружаете строки из файлов выбранного языка.

Таким образом, при формировании страниц, текст должен загружаться из файлов с переводами, а не прописываться в шаблонах.

Примечание. В этой статье речь идет о локализации фрэймворка и сайта, а не контента. Т.к. контент (текстовый) обычно находится в базе данных, то для размещения переводов вам, скорее всего, придется создать дополнительные таблицы и изменять запросы в зависимости от выбранного языка.

Создание файлов переводов

Т.к. CodeIgniter это PHP фрэймворк, то и файлы с переводами представляют собой обычные PHP скрипты, в которых объявлены массивы строк. Имена этих файлов должны обязательно содержать окончание «_lang.php».
Читать дальше

17 WordPress плагинов, которые у меня активированы

Владимир | | WordPress.

17 плагинов для wordpress

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

Я не буду утверждать, что здесь собраны лучшие плагины (это скорее всего не так), но некоторые из них я выбрал после тестирования 5-10 аналогичных. И, кроме того, все они 100% рабочие 🙂 .
Читать дальше

Как защитить свой web ресурс. Примеры безопасных PHP скриптов.

Владимир | | PHP, Разное.

Защита web ресурса
Данные, полученные от посетителя сайта, нужно проверять. Это знают все, это постоянно повторяют во всех руководствах по программированию. Но в большинстве случаев сразу после проверки возникает вопрос: «А что делать, если данные не прошли проверку? Вывести сообщение об ошибке? Попытаться их исправить?».

В этой статье я покажу несколько приемов проверки и обработки входных данных.

Но, прежде всего, разберемся, какие типы некорректных данных мы можем получить от пользователя. Их всего два:
1) случайные ошибки;
2) специально сформированные запросы для взлома сайта.

В первом случае нужно объяснить посетителю, как исправить ошибку. Т.е. отправить его на страницу с инструкцией (или показать текст около поля ввода).

Второй случай немного сложнее. Тут главное помнить одно простое правило: «Никогда не доверяй данным, полученным от браузера». И не важно, выполняется ли проверка с помощью JavaScript или нет, имея минимальные знания программирования можно сформировать и отправить любой запрос. Отсюда вывод – все данные должны быть проверены на стороне сервера.

На сегодняшний день наиболее часто применяется два вида атак на сайт. Это SQL Injection и Cross Site Scripting (XSS). Рассмотрим их немного подробнее.
Читать дальше

PHP framework. Вышла новая версия CodeIgniter.

Владимир | | CodeIgniter, PHP.

Спешу поделиться приятной новостью. Вышла новая версия php фрэймворка CodeIgniter. Новая версия имеет номер 1.6.0 и до этого момента была доступна только через репозитарий (Subversion).

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

Похоже, основные изменения коснулись работы с базой данных. Кроме того, изменена работа с сессиями (давно пора, в предыдущей версии были проблемы с безопасностью, и приходилось использовать дополнительные библиотеки). Ну и как обычно куча мелких изменений, багфиксов и т.п. 🙂

В общем, буду тестировать. А о результатах обязательно напишу 🙂 .

P.S. На мой взгляд, это один из лучших фрэймворков.