PHP: фильтр от XSS и SQL-инъекций.
комментариев 48
Предлагаю небольшое исследование на тему безопасности веб-приложений и фильтрации вводимых данных. Скорее всего, я ещё вернусь к этой теме, но сейчас больше хочется не писать трехтомник, а сохранить и упорядочить собранное и проверенное. В частности, речь пойдёт о фильтрационной защите от XSS-атак и SQL-инъекций.
В PHP есть ряд специальных функций для работы со строками, применимых для этой цели. Вот они:
strip_tags() — вырезает теги HTML и PHP из строки.
htmlspecialchars() — конвертирует только специальные символы (‘&’, ‘»‘, »’, ‘<‘ и ‘>’) в HTML сущности (‘&’, ‘"’…). Используется для фильтрации вводимых пользователем данных для защиты от 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-запросу. Возвращает функция очищенную строку. Конечно, это не панацея, но функцию легко изменить под собственные нужды.
InputClear.phps - фильтрация введённых пользователями данных.
Если кто-то обнаружит ошибки, или знает способ лучше — добро пожаловать в комментарии, мне очень интересно.

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


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