Категории: Web разработка

Как обойти запрет на XSS

Владимир | | Ajax, htaccess, HTML, PHP, Web разработка.

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

Приведу небольшой пример. Недавно я рассказывал об использовании Яндекс.Карт и сервиса IPLoc.

Для получения данных от IPLoc пришлось использовать PHP, хотя, как совершенно справедливо заметил Big_Shark, было бы гораздо удобнее отправить этот запрос с помощью JavaScript. Но кросс-доменный JavaScript запрещен политиками безопасности браузеров.

Тем не менее, мне стало интересно, можно ли обойти это ограничения без использования серверных скриптов (PHP). И решение, конечно, нашлось 😉 Правда, оно имеет свои недостатки, но об этом чуть ниже.
Читать дальше

PHP: создаем собственный сервис геотаргетинга

Владимир | | HTML, MySQL, PHP, Web разработка.

Некоторое время назад я рассказывал об использовании Яндекс.Карт и сервиса IPLoc, который позволяет определить географические координаты посетителя по его IP адресу.

К сожалению, этот сервис сейчас практически все время недоступен. И эта ситуация наглядно показывает, насколько опасно полностью полагаться на сторонние сервисы.

Конечно, проблемы бывают у всех. Но если не работает собственный ресурс, можно попытаться что-то сделать, а тут остается только ждать.

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

В общем, глядя на сложившуюся ситуацию, я начал искать локальную альтернативу IPLoc, т.е. готовую базу данных. Т.к. платные варианты меня не устраивали, то искать пришлось довольно долго 🙂

В результате я остановился на сервисе WIPmania.com. Он предоставляет и API для получения данных, и базу данных.
Читать дальше

Использование нескольких баз данных в CodeIgniter

Владимир | | CodeIgniter, PHP, Web разработка.

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

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

Т.е. вызвать два раза функцию mysql_connect (если, конечно, используете MySQL).

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

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

Я расскажу о подключении и использовании нескольких баз данных в CodeIgniter. Но, естественно, это не единственный фреймворк, который имеет встроенные библиотеки для работы с несколькими БД. Например, недавно я читал статью «Работа с несколькими базами данных при помощи ORM в Zend Framework».

В качестве примера рассмотрим подключение к двум БД.
Читать дальше

Настройка профайлинга в xdebug для работы с отдельным web приложением

Владимир | | PHP, Web разработка.

Сегодня я хочу продолжить тему профайлинга (profiling) web приложений с помощью XDebug.

Как известно, этот отладчик позволяет изучать производительность PHP скриптов. Такая операция называется профайлинг. В этом режиме XDebug после каждого выполнения PHP скрипта создает текстовый файл с данными о вызванных функциях и времени их выполнения.

Естественно, анализировать вручную такие файлы очень неудобно. Лучше использовать специальные инструменты.

Наиболее распространенным является KCacheGrind (под Linux) и WinCacheGrind (аналог для Windows). Но есть и web приложение для анализа этих файлов. Называется Webgrind.

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

Неожиданное поведение Eclipse

Владимир | | Eclipse, Web разработка.

Недавно я столкнулся с проблемой. Даже не проблемой, а просто нюансом в работе Eclipse. Но именно из-за таких «нюансов» эта IDE сбивает «с толку» новичков, да и не только их. Я даже где-то читал мнение, что Eclipse неустойчиво работает при количестве файлов в проекте больше 100 🙂

Итак, проблема была следующая.

Создаю статический web проект (Static Web Project). Он появляется в общем списке проектов, но не разворачивается. Я аж растерялся 🙂 Несмотря на то, что не первый год работаю с этой IDE раньше такого не видел.

Смотрю в проводнике. Папка проекта создана, вроде все правильно…

Перезапускаю IDE, нулевой эффект.
Читать дальше

Изменяем файлы с помощью Phing

Владимир | | Phing, Web разработка.

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

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

Представьте ситуацию. Вы делаете сайт, сначала тестируете его локально, а затем переносите на сервер. Естественно, перед загрузкой на сервер нужно будет как минимум изменить параметры подключения к БД.

Затем вы находите ошибку (или просто решаете что-то изменить) и процесс повторяется заново.

Каждый раз менять настройки вам быстро надоест, особенно если изменить нужно не один файл, а несколько. Да и забыть что-то очень легко.

В этой статье я покажу небольшой пример как с помощью Phing можно автоматизировать такие операции.

Примечание. Почитать о том что такое Phing и зачем нужен можно здесь.

Прежде всего, сформулируем задачу.
Читать дальше

Отмечаем место нахождения посетителя на Яндекс.Карте

Владимир | | HTML, JavaScript, PHP, Web разработка.

Эта статья о совместном использовании двух web сервисов: IPLoc и Яндекс.Карты.

Прежде всего, разберемся зачем нужны одновременно два сервиса.

С Яндекс.Картами, все просто. Этот сервис позволяет разместить на странице спутниковую или обычную карту. При этом карта будет интерактивной, т.е. посетитель сможет перемещать её, изменять масштаб, тип, измерять расстояния и т.д.

Сервис IPLoc, в свою очередь, позволяет определить географические координаты указанного IP адреса, т.е. широту и долготу. А это как раз те данные, которые нужны чтобы указать точку на Яндекс.Карте.

Примечание. Вместо Яндекс.Карт можно использовать Google Maps, о которых я уже рассказывал. В этот раз я выбрал Яндекс.Карты потому что они содержат более подробные карты с названиями улиц для городов СНГ.

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

Принцип работы.
Читать дальше

Закрываем доступ к сайту с помощью .htaccess и PHP

Владимир | | htaccess, PHP, Web разработка.

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

Дело в том, что недавно я просматривал собственные посты и заметил, что в одном из них задача решается далеко не лучшим образом. Речь шла о блокировке доступа к блогу на движке WordPress.

Решение, которое я тогда предложил, работоспособное и им вполне можно пользоваться. Но только какое-то оно сложное 🙂

Нужно было использовать несколько файлов .htaccess для разных папок блога. Доступ для администратора получался немного ограниченным, например, статические ссылки не работали.

И, самое главное. Как абсолютно верно заметил Олег Лобач в комментариях к тому посту, если сайт закрыт на обслуживание, то необходимо отправлять заголовок с 503 кодом (Service Unavailable).

Для посетителей этот код роли не играет, они все равно увидят страницу с описанием ошибки, но вот поисковые боты – другое дело. Думаю, никому не захочется, чтобы в индекс поисковика попала фраза «Зайдите позже» вместо контента блога.

В общем, сейчас хочу рассказать о другом, на мой взгляд, более удачном решении.
Читать дальше

Ограничиваем доступ к файлам на сервере

Владимир | | CodeIgniter, PHP, Web разработка.

В этой статье я хочу рассказать о нескольких вариантах ограничения доступа к файлам на сервере.

Т.е. мы сделаем так, чтобы посетитель перед загрузкой в обязательном порядке выполнил какие-то действия (например, вводил captcha).

Существует два основных варианта решения задачи.

1) Скачиванием файлов будет управляет PHP скрипт.

2) Скачивание происходит через web сервер, но только в том случае, если у посетителя есть соответствующее разрешение.

Прежде всего, разберем достоинства и недостатки обоих методов.

Первый вариант. Вообще-то единственное его достоинство – это возможность реализации на shared-хостинге.

Зато недостатки очень серьезные. Файл отправляется пользователю через PHP скриты, т.е. работают все ограничения, действующие на них. Например, если для скриптов установлено максимальное время работы 15 сек, то значит, файл должен быть загружен за это время. Тоже самое и с максимально допустимым объемом памяти.

Проще говоря, никаких больших файлов отдавать таким способом не получится.

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

Второй вариант выглядит значительно привлекательнее. Ситуация с достоинствами и недостатками полностью противоположная. Отдавать файлы будет Apache без использования PHP. Но чтобы реализовать проверку посетителей, нужно иметь доступ к конфигу сервера (httpd.conf).

Рассмотрим общий принцип загрузки файла

Читать дальше

Обработка произвольного количества полей на PHP

Владимир | | PHP, Web разработка.

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

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

Прежде всего немного теории.

Как известно, сколько бы полей форма не содержала, PHP скрипт получит все эти значения в массиве $_POST. Ключи элементов этого массива будут соответствовать атрибутам name полей формы. Используя эти ключи мы можем получить значение любого из полей.

Т.е. можно в цикле перебрать все элементы массива $_POST и узнать значения всех полей.

На этом можно было бы и остановиться, но на практике часто встречается такая ситуация. Форма содержит несколько обязательных полей и произвольное количество необязательных. Причем обычно необязательные поля содержат однотипные данные (которые и обрабатывать нужно отдельно).

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