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

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

Защита от 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 - фильтрация введённых пользователями данных.

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

Резервирование и бэкап — зачем и как.

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

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

Начнём с сайта. Среднестатистический сайт — это набор файлов на диске и база данных, как правило — MySQL.

С базой данных особых проблем не вижу:

  • для WordPress есть плагин WordPress Database Backup, который сохраняет базу по расписанию и отправляет её на e-mail
  • для других систем можно воспользоваться скриптом Sypex Dumper, или настроить дамп и отправку по почте самостоятельно (несколько строк кода).

С сохранением файлов сайта чуть сложнее. Можно просто периодически сохранять их вручную, но можно и автоматизировать.

Сначала заархивируем все файлы сайта в один архив с помощью библиотеки PclZip:

<?php require_once('pclzip.lib.php');
$date = date('Y-m-d');
$archive = new PclZip("$date.zip");
$v_list = $archive->add('../');
if ($v_list == 0) { die("Error : ".$archive->errorInfo(true)); }

В этом примере $v_list — это относительный путь к архивируемому каталогу или список каталогов и фалов через запятую. Выбирайте сами, что именно нужно резервировать.

После этого можно сделать дамп MySQL базы и добавить его в этот архив, а потом, например, отправить полученный архив по почте с помощью класса PhpMailer и удалить его чтобы не занимал место. Запускать этот процесс можно с помощью планировщика у хостинг-провайдера или (если это WordPress) с помощью WP-Cron.

Законченного решения я не выложил, но конструктор укомплектован — собирайте кому что нужно, все части надёжны и проверены.

Следующий эпизод — локальный компьютер. Тут стоит сразу определиться — что именно резервировать. Для больших и редко используемых файлов (фото, видео, архивы) я поставил себе под стол старенький компьютер под Ubuntu, настроил NFS и забыл о нём — приходя домой я получаю доступ к этим файлам, а в крайнем случае — можно и удалённо залезть.

А для регулярного бэкапа текущих проектов вполне подойдёт Gmail. Бесплатный почтовый ящик вмещает до 10Gb данных, а самый интересный фокус в том, что его можно подключить как обычный диск — как в Linux, так и под Windows. А сохранять туда нужные файлы тоже можно кроном, или его Windows-аналогом — nnCron + nnBackup.

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

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

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

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

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

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

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

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

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

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

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

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

Майские праздники.

комментарий 31

Неизбежно надвигается май а весте с ним — выходные и праздники. У меня на сегодняшний день три новости.

В первую очередь хочется отметить, что завтра — 1 мая, а это значит, что моему блогу исполняется ровно один год. Да, первого мая 2007 года была опубликована первая запись — Выбор движка для блога.

За год сделано многое — написано 212 статей, создан уникальный дизайн, на внутреннем счётчике — 78126 уникальных посетителей за этот год, на фидбернере — больше тысячи читателей, запущено несколько субдоменов.

Статистика по liveinternet Статистика по feedburner

Вторая новость. Первого мая проходит акция «RSS Awareness Day» в поддержку формата RSS как наиболее удобного и современного способа получения информации с сайтов и блогов. Что такое RSS?

Chaos Constructions 2008: начинается подготовка.

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

Chaos Constructions 2008Chaos Constructions 2010.

Ежегодный Санкт-Петербургский хакерский фестиваль Chaos Constructions (ранее — ENLiGHT) начинает сверхраннюю подготовку к старту. Организаторы определились с датой — в этом году это будет 30 и 31 августа, как всегда включая ночь.

Тематика Chaos Constructions в этом году — электроника и микроконтроллеры. Но это только небольшой акцент, фестиваль пройдёт в духе своих лучших традиций.

На фестивале пройдут все традиционные конкурсы в полном объеме, а так же некоторые новые, например, Realtime Graphics и Invitation Compo (конкурс приглашений), приём работ на который уже начался. В прошлом году меня можно было увидеть среди организаторов на Antique и мельком на HackAround, в этом году пока не знаю свою форму участия.

Условия участия — стандартные для CC — 400 рублей за 2 дня, девушкам и участникам выставки раритетной техники вход бесплатный. Регистрация уже началась.

Небольшой экскурс в прошлое:

UPD: Уточнилось — я в организаторах. Пресс-центр.

UPD2: Отчёт по Chaos Constructions 2008.

Asus EeePC — как избавиться от Windows и поставить Xandros.

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

Asus EeePCСтал счастливым обладателем Asus EeePC — нашумевшего сабноутбука с рекордными ценой и размером. Меня не очень задела всеобщая истерика, связанная с этими устройствами, мне необходимо было мобильное устройство, а этот ноутбук оказался дешевле емкой батарейки в Dell Inspiron.

С лёгкой руки первых пользователей устройства этого класса окрестили SCC — Small Cheap Computer.

Приобретённый мной EeePC 4G XP шёл с предустановленной Windows XP Home, что не очень-то меня впечатлило. Как оказалось, задача установить на него родной Xandrox Linux не самая простая — пришлось вдоволь порыскать по сети в поисках инструкций и файлов — в комплекте к «ишке» шёл только диск с Windows (это цинизм — в устройстве нет CD-привода).

Как оказалось, получить диск с Xandros можно тут:

Поскольку в наличие есть диск с Windows из коробки, то особой разницы откуда качать нет, но для установки понадобится компьютер с Windows и CD-ROM. Скачанный диск можно записать на болванку или смонтировать эмулятором и запустить утилиту создания загрузочной флешки (нужна флешка на 2Gb).

Asus EeePC

Загрузив EeePC с полученной флешки, мы получим «ишку» с установленной родной unix-like ОС. На чистом английском языке. Но это тоже поправимо: жмём Ctrl+Alt+T, открывается терминал.
su
(пароль)
dpkg-reconfigure locales

В открывшемся меню нужно выбрать ru_RU.UTF-8 и сохранить настройку.
mcedit /etc/X11/xorg.conf
Исправить строки в секции «InputDevice» / Identifier «keyboard» следующим образом:
Option "XkbLayout" "us,ru"
Option "XkbVariant" ",winkeys"
Option "XkbOptions" "grp:caps_toggle"

И обновим систему:
apt-get dist-upgrade

Всё, получаем русскую раскладку (переключение — капслоком), русские меню и русскую локаль.
Xandros на разрешении «ишки» (800×480) выглядит намного солиднее Windows, да и работает побыстрее. Мне уже удалось запустить Quake 3 Arena на этом устройстве (кому интересно — проинструктирую), надо будет попробовать запустить OpenArena. Впечатления от устройства исключительно позитивные — работает быстро, в карман влезет. Есть с чем поехать на СПИК-2008.

5 игр, в которые играл даже я.

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

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

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

1. Half Life и Half Life2. Культовый шутер с революционным сюжетом, AI, геймплеем и атмосферой. Всё ещё коплю деньги на мегамощный компьютер чтобы посмотреть на красоту второй части.

2. Quake ]l[ Arena и OpenArena (Linux-версия). Все измерения в полном объёме и динамике. Тотальный контроль в ритме Offspring. Турниры по пятницам на работе, я непобедим.

3. GTA Vice City. В эту игру играют почему-то в основном дамы — сестра, девушки. Иногда помогаю. Тоже под Offspring или Transplants.

4. Splinter Cell. Уникальный стелс-экшн. Эта игра меня в своё время зацепила и не отпустила до конца. Месяц игры и 2 недели реабилитации, прижимаясь спиной к стенам.

5. Unreal Tournament 2003 Beta. Лежала в папке Demo на моём ноутбуке от Dell, который я брал в Компьютерном Мире. Понравилась. Иногда помогает расслабиться, достаточно выйграть пару крупномасштабных баталий.

Вообще, в играх и в работе есть свои какие-то биоритмы. Сейчас, например, вообще не играю — приятнее ковыряться в коде. Я слушаю своё настроение и не удаляю с диска Q3 и UT.

Магадан — бета-версия нового поиска Яндекса.

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

Яндекс наконец открыл карты и рассказал в своём блоге, что он имел в виду, пугая оптимизаторов грядущим апдейтом алгоритма с кодовым именем «МАГАДАН«.

После последних экспериментов с алгоритмами, которые привели к местами нерелевантной выдаче, Яндекс решил больше не шутить с основной выдачей и спросить таки мнение пользователей (оптимизаторов?), выложив новый алгоритм для начала на отдельном домене — buki.yandex.ru.

Яндекс Магадан

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

Оптимизаторы восприняли эту новость по-разному — кто-то радуется, что худшие слухи не подтвердились, а кто-то в шоке от нового алгоритма. Будем надеяться на продолжение поворачивание Яндекса лицом к оптимизаторам и простым пользователям.

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

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

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

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

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

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

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

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

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

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


© 2007-2026 Блог разработчика, страница об авторе.