PHP: фильтр от XSS и SQL-инъекций.

49 комментариев

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

В PHP есть ряд специальных функций для работы со строками, применимых для этой цели. Вот они:

strip_tags() — вырезает теги HTML и PHP из строки.

htmlspecialchars() — конвертирует только специальные символы (‘&’, ‘»‘, »’, ‘<‘ и ‘>’) в HTML сущности (‘&amp;’, ‘&quot;’…). Используется для фильтрации вводимых пользователем данных для защиты от XSS-атак.

htmlentities() — конвертирует все символы в строке (кроме букв) в мнемоники HTML. Используется для защиты от XSS, являясь более гибким аналогом htmlspecialchars.

stripslashes() — удаляет заэкранированные символы (после преобразования в сущности предыдущими функциями их незачем экранировать). Обычно используется в связке с проверочной функцией get_magic_quotes_gpc(), показывающей текущую установку конфигурации magic_quotes_gpc.

Эта конфигурация влияет на то, как будут обрабатываться специальные символы, содержащиеся в данных, передаваемых пользователем (массивы $_GET, $_POST, $_COOKIE). При magic_quotes_gpc = 1 эти спецсимволы (одиночные и двойные кавычки, обратный слэш, байт NULL) автоматически экранируются. При magic_quotes_gpc = 0 все данные передаются в таком виде, в каком их ввел пользователь. В последнем случае в целях безопасности требуется обрабатывать передаваемые данные.

mysql_real_escape_string — мнемонизирует специальные символы в строке для использования в операторе SQL с учётом текущего набора символов в кодировке соединения. Иными словами, функция превращает любую строку в правильную и безопасную для MySQL-запроса. Используется для очистки всех данных, передающихся в MySQL-запрос для защиты от SQL-инъекций.

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

скачать PHP скриптInputClear.phps - фильтрация введённых пользователями данных.

Если кто-то обнаружит ошибки, или знает способ лучше — добро пожаловать в комментарии, мне очень интересно.

Жилинский Владимир.



Старые проблемы WordPress.

24 комментария

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

Помните, чуть больше года назад пользователи, переходящие из ЖЖ (LiveJournal.com) лихорадочно искали удачные сборки Nested Comments + Subscribe To Comments? Я помню.

Проблема первая — древовидные комментарии.

Выходя из того же ЖЖ, новые пользователи ждали и ждут наличия в WordPress привычной и действительно необходимой функциональности — возможности ответить на любой комментарий и получить ответы на e-mail. По какой причине это так и не включили в официальный дистрибутив — загадка. А по какой причине это до сих пор нельзя реализовать без шаманского бубна — большая загадка.

Threaded comments - древовидные ветвящиеся комментарии в WordPress

Вот возможные варианты реализации:

  • Brian’s Threaded Comments (тот самый первый Nested Comments) — криво реализован на JavaScript, с коверканьем кода и превращением установку других плагинов в окончательное шаманство. Требует замены comments.php, не поддерживает стандартный WordPress Plugin API. Иными словами, это даже не плагин — это костыль.
  • Alex’s Threaded Comments — его форк, на вид не отличить.
  • YATCP — упрощённая версия. Очень упрощённая, за счёт этого абсолютно неудобная.
  • WordPress Thread Comment — китайская версия. Немного лучше BTC, но в целом — тот же JavaScript и безумие с кроссбраузерной версткой.
  • Disqus — монстроподобный и избыточно функциональный внешний сервис.
  • Intense Debate — аналог Disqus.

Подводя черту, можно сказать, что нормального, рабочего плагина, основанного на WP Plugin API и работающего без проблем просто нет. В этом блоге никаких threaded-комментариев не будет, пока я не найду или не напишу что-то работоспособное.

Проблема вторая — авторизация.

Писать в каждом блоге своё имя, адрес почты, блога и сколько будет 39+54 все уже порядком подустали, а единой системы авторизации нет даже на горизонте. Нужен аналог Яндекс.Паспорт или Google Accounts, например. Или плагин, который будет работать с аналогичной системой авторизации — с Google это, кажется, даже возможно. Да, есть OpenID — ещё одна группа кривых плагинов:

  • WP-OpenID — в данный момент его можно проверить у меня в комментариях. Мой аккаунт в ЖЖ считает анонимом, но комментарии принимает (!). С Я.Блогами работает отлично, но почему нет вообще никаких настроек? И ЖЖ — это не самый малоизвестный сервис.
  • Alternate OpenID for WordPress — альтернативный и опять же упрощённый до бесполезности вариант.

Есть ещё правда наш русский альтернативный проектOne-Face.ru (его тоже можно попробовать у меня в комментариях). Он построен на собственном протоколе на основе Flash. Однажды зарегистрировавшись и залогинившись, во все подключенные блоги можно авторизоваться в один клик. Это, оказывается, весьма удобно, но создателям ресурса я уже посоветовал озаботиться разработкой не_флэш_версии плагина и дизайном этих модулей.

Именно по этим двум направлениям очень хочется улучшения. А не через раз работающих флэш-загрузчиков в админке.

Жилинский Владимир.



Проверка ТиЦ на PHP — ещё быстрее.

56 комментариев

PHP определение ТиЦНесколько дней назад я выкладывал скрипты для определения средствами PHP показателей Яндекс ТиЦ и Google PR для сайтов (это может быть полезно при создании рейтингов, каталогов и для SEO). В комментариях Виталий спрашивал — почему скорость определения ТиЦ такая низкая (до минуты). Причина была найдена вместе с альтернативным решением.

Дело в том, что я пытался определить ТиЦ, используя данные для Яндекс.Бара, которые отдаются медленно (недостаток серверных ресурсов, скорее всего). Решение — обращаться к каталогу Яндекса, который неизбежно показывает нужное значение (хотя, говорят, иногда обновляется с небольшим опозданием).

По скорости — получилось. Всё-таки, каталог — это сайт, а сайт Яндекса должен работать быстро. Исчезли задержки по 30-50 секунд, скрипт выполняется за 0.20.3 секунды.

скачать PHP скриптCy-2.phps - получение Яндекс ТиЦ в виде числа.

Проверить скорость и точность работы кода можно на том же тестовом скрипте.

PS: У меня всего 100 коллег? Не верю!

Жилинский Владимир.



Коллеги — 1000 IT-блогов.

148 комментариев

Помните, в сентябре 2007-го я проводил Конкурс Конкурентов с выбором лучших IT-блогеров? С тех пор прошло уже порядком много времени, но проводить конкурс повторно я пока не хочу. А вот блогролла мне уже мало. Да и не конкуренты мы вовсе — я бы сказал, коллеги:

Коллеги: 1000 IT-блогов

Скрипт ещё толком не отлажен, так что если что — пишите в комментарии. Ну и помогайте наполнять, конечно. Условия добавления блога в эту матрицу — IT-направленность и наличие постов за последние 30 дней.

Скрипт разработан на основе исходника Юрия Пименова (aka Danaki), блог которого заработает к понедельнику.

Жилинский Владимир.



WP-Cache — ускоряем загрузку блога.

19 комментариев

wp-cacheКогда-то давно, около года назад, я уже пробовал поставить на блог кеширующий плагин, но тогда и WP был другой версии, из плагинов только каждый десятый работал. Но вот настал период, когда захотелось улучшить ситуацию со скоростью доступа к блогу — на VDS поселился посещаемый магазин и скорость стала пониже.

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

Я замерил начальную скорость. Результат - 3.8 сек.

После этого я установил плагин WP-Cache 2.1.12. Устанавливается он весьма просто:

  • Скачать последнюю версию.
  • Распаковать.
  • Загрузить папку wp-cache в каталог /wp-content/plugins/ на сервер.
  • Выключить в админке GZIP-сжатие (по умолчанию — выключено).
  • В файл wp-config.php добавить строчку define(‘WP_CACHE’, true); (если файл закрыт от записи).
  • Активировать плагин в панели управления и включить в настройках.

Я не стал ничего менять в настройках плагина, кроме времени кеширования (увеличил до 10800 секунд — это 3 часа).

После этого я сделал ещё один замер скорости. Результат - 0.8 сек.

Разница чувствуется даже без секундомера. Так что всем читателям — обратить внимание на увеличившуюся скорость загрузки блога, а всем блогерам — замерьте свою скорость и задумайтесь о кешировании. Помогает.

Жилинский Владимир.



Тысяча читателей

34 комментария

Вот и свершилось — преодолен некий скорее психологический рубеж в 1000 читателей блога.

You need to upgrade your Flash Player

Если судить по меркам ЖЖ, то теперь я «тысячник», а если по идеям нашей ненормальной законодательной власти — то СМИ. Поздравления принимаются ))

График обновляется динамически, забирая данные за последний год по XML c FeedBurner Awareness API. Забирает XML FeedBurner.class и превращает его в динамический XML-файл данных для amCharts. Лень было уходить от динамики и настраивать крон. Если кому интересно — выложу код или более подробную инструкцию.

Жилинский Владимир.



Как на сайте сделать…

20 комментариев

Как на сайте сделать…По ряду причин, мне не найти времени и сил на полноценную статью, а написать что-нибудь хочется. Поэтому я просто дам несколько полезных на мой взгляд ссылок на статьи моих коллег-блогеров. На всякий случай: в этих статьях описывается решение задач средствами PHP.

Итак, как…

Может кто-нибудь продолжит список в комментариях ?

Жилинский Владимир.



Морфологический анализатор для PHP-скриптов

24 комментария

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

Самый удачный, быстрый и простой в использовании морфологизатор я нашёл совсем недавно. Это phpMorphy. и он умеет следующее:

  1. Определение словоформ слова;
  2. Определение корня слова;
  3. Определение начальной формы слова.

Если нужно реализовать поиск с учётом словоформ, то это совсем просто — нужно просто получить корень слова с помощью phpMorphy ( $root = $morphy->getPseudoRoot($words); ) и провести поиск по базе данных SQL-оператором LIKE.

Сам скрипт занимает не больше 30 Kb, а русский словарь для него - 2.5 Mb.

Справедливости ради отмечу, что рассматривались и другие морфологические скрипты.

Жилинский Владимир.



Определяем Google PR и Яндекс ТиЦ в PHP

25 комментариев

PHPВот несколько простых функций, которые позволяют скрипту получить значения классических пузомерок (ТиЦ, PR) для страницы или сайта средствами PHP, может кому-нибудь пригодятся. Не требуют от сервера ничего сверхъестественного — PHP и возможности внешних соединений будет вполне достаточно.

скачать PHP скриптGetPR.phps — получение Google PR в виде числа.

скачать PHP скриптGetCY.phps — получение тулбарного Яндекс ТиЦ в виде числа.

Ещё Яндекс ТиЦ можно получить из каталога в виде картинки вот таким образом:

<img src=http://www.yandex.ru/cycounter?$uri>

Картинка, взятая по этому адресу покажет favikon`ку сайта, закешированную Яндексом.

<img src=http://favicon.yandex.net/favicon/$uri/>

$uri в этих примерах — нужный адрес сайта без http:// и www.

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

Спонсор: Мегаплан, удобная система управления задачами.

Жилинский Владимир.

«Недосол – на столе, пересол – на спине» — гласит русская народная поговорка. Но, что делать если пересолил? Можно ли спасти пересоленное блюдо?



5 признаков хорошего веб-разработчика.

24 комментария

5 признаков хорошего веб-разработчикаДля веб-разработчика, как и для любого IT-специалиста важен не столько опыт, сколько способность находиться «на волне», чувствовать тенденции и течения развития интернета — своей рабочей среды. Как стать восстребованным и талантливым разработчиком, не имея большого опыта? Вот пять простых вещей, которые могут в этом помочь:

1. Активно пользуйтесь популярными веб-сервисами.

Храните фотографии на Flickr и Яндекс.Фотках, общайтесь в Facebook и ВКонтакте, пользуйтесь Google Docs, социальными сетями новостей и закладок, присмотритесь к новым плагинам для вашего браузера. Это позволит вам быть в курсе — как работают веб-сервисы, как устроены их интерфейсы, а главное — что удобно, а что нет.

2. Ведите блог.

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

3. Будьте амбициозны.

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

4. Будьте любопытны.

IT, а особенно интернет — безумно динамичное поле деятельности. Чтобы добиться успеха нужно точно знать, чего от него ждать завтра. Читайте блоги, изучайте форумы, общайтесь с коллегами, чувствуйте все последние тенденции и малейшие шорохи. Узнайте, кто же всё-таки купит Yahoo и зачем. Прогнозируйте и не бойтесь ошибиться. Если вы с детства не любопытны и не любознательны — вы выбрали не ту отрасль.

5. Развивайтесь.

Саморазвитие — это лучшее, чем вы можете заняться. Не нужно уподобляться программистам, которые вместо решения проблемы ищут причины невозможности её решения. Ищите эффективные способы решения проблем, исходя из средств, опыта и прогнозов. Не делайте из работы рутину и не впадайте в апатию — лучше изучите Java, RoR или Ajax — пригодится.

Жилинский Владимир.




© 2007-2010 Блог интернет-разработчика, автор — Zhilinsky.ru.
При использовании информации ссылка на источник обязательна.