По дате Январь 8th, 2011

Фильтрация данных в PHP

you should always be wary of any data provided by outside services

Все данные, поступающие в php-скрипт (да и вообще в любую программу) “извне” следует проверять на “корректность”. Это может быть как защита “от дурака”, так и от “злобного хакера”.

Характерные уязвимости в PHP-скриптах и фильтрация данных

0. Убедитесь, что переменная “та, что надо” (при включении register_globals, существует возможность вместо $_SESSION или $_COOKIE переменной обратиться к $_GET или $_POST; не лишним будет проверить HTTP_REFERER)
1. Все переменные, которые предполагают числовое (целое,дробное, дата-время) значение следует привести к соответствующему типу;
1* Имеет смысл проверить на допустимость (неотрицательное, меньше допустимого максимума,несуществующая дата) в зависимости от контекста;
2. Все строковые переменные, которые имеют ограничение по длине следует “укоротить”
3. Все строковые переменные следует “очистить” от недопустимых символов (можно воспользоваться, например, функцией preg_replace с заданием соответствующего шаблона регулярного выражения - для email, для имени домена, для логина пользователя и т.д.)
4. Во всех данных, попадающих в запрос к базе данных следует экранировать спецсимволы (addslashes/mysql_escape_string… - кавычки, проценты в LikE и т.д.) SQL-инъекции (SQL injection)
5. Все данные, которые выводятся в браузер следует “почистить” от недопустимых HTML-тэгов (xss-уязвимости через тэги начиная от

Начиная с версии 5.2.0 в PHP присутствуют специальные функции для фильтрации данных, см. filter_var. Встроенные константы позволяют не задумываться о регулярных выражениях для email, например (хотя, общее понимание лишним не будет)

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

Если будут рекомендации по дополнению списка или корректировке - добро пожаловать в комментарии. Или Orphus =)

Ссылки по фильтрации данных в PHP
http://ru.php.net/manual/en/book.filter.php
http://phpclub.ru/detail/article/2003-12-01
http://phpclub.ru/detail/article/2003-09-23
http://itstep.wordpress.com/2010/05/31/php-vs-aspx/
http://www.webpeeps.ru/article/12

Опубликовано Январь 8, 2011 | автор: levik  |  Нет комментариев »