Главная страница статей --> Советы по фотошопу, графике и хитрости в построении php кода

Десять правил написания безопасного кода на PHP

Источник: realcoding.net

В серии статей "Ten Security Checks for PHP" кратко рассматриваются 10 наиболее часто совершаемых PHP программистами ошибок, приводящих к проблемам с безопасностью скриптов.

Избегайте использования переменных сформированных на основании данных пользователя в функции включения файла (include, require) или доступа к файлу (readfile, fopen, file). Например: include($lib_dir . "functions.inc"); include($page); переменные $lib_dir и $page перед этим нужно проверить либо на предмет наличия запрещенных символов, либо сопоставить с заранее определенным массивом допустимых значений:

$valid_pages = array(apage.php => , another.php => , more.php => );
if (!isset(
$valid_pages[$page])) {
die(
Invalid request);
}

if (!(
eregi(^[a-z_./]*$, $page) && !eregi(\.\., $page))) {
die(
Invalid request);
}

Необходимо экранировать опасные символы (" и ) в переменных участвующих в SQL запросах.Например, злоумышленник может передать переменную вида "password=a%27+OR+1%3Di%271" которая будет использована в SQL запросе как "Password=a or 1=1". Решение: включить magic_quotes_gpc в php.ini или экранировать переменные самостоятельно через addslashes();

Никогда не нужно доверять глобальным переменным, при включенном в php.ini режиме register_globals злоумышленник может подменить значение глобальной переменной. Используйте ассоциативные массивы $HTTP_GET_VARS и $HTTP_POST_VARS с выключенным register_globals и в начале скрипта явно инициализируйте все глобальные переменные.

Определяйте местонахождение закаченного файла только через is_uploaded_file() или используя move_uploaded_file(), но не доверяйте глобальной переменной с путем к закаченному файлу, значение которой злоумышленник может подменить.

Используйте функции htmlspecialchars(), htmlentities() для экранирования HTML тэгов присутствующих в данных полученных от пользователя.

Защищайте библиотеки функций от просмотра их исходных текстов пользователем (расширения .inc, .class). Решение: снабжайте библиотеки расширением .php, помещайте в закрытую директорию или настройте хэндлер для парсинга расширения файлов с вашими библиотеками.

Помещайте файлы данных вне дерева файловой системы доступной через web (уровнем ниже htdocs, или "document root") или защищайте директории через .htaccess.

mod_php запускайте в режиме safe_mode.

Проверяйте наличие запрещенных символов в переменные используемых в функциях eval, preg_replace, exec, passthru, system, popen, ``.

При использовании не mod_php, а CGI варианта php.cgi не забывайте, что через php.cgi можно получить доступ к любому файлу в директориях защищенных через .htaccess, так как доступ в этом случае ограничен только для прямых запросов, но не для запросов через CGI скрипт php.cgi.



Похожие статьи:
- В каких поисковиках надо раскручиваться?
- Использование HTML-таблиц для вывода диаграмм
- Сколько человек на сайте?
- Безопасное программирование на PHP
- Генератор паролей
- Про тэги и метатэги
- CSS: советы и приёмы, часть 1
- Слежение за контентом на динамических сайтах
- Обработка строк в РНР
- Грамотная работа с файлами: исключительная блокировка файлов
- Таблицы и границы
- Списки a la MS Word
- Какой нужен сайт? (продолжение)


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.004]