Безопасное программирование в PHP: подключаемые файлы

by jeurey on Февраль 10, 2008

Так либо иначе, при написании систем, которые выходят за рамки простых «парсилок» и должны иметь разветвленную логику приложения, программисты используют параметры, принимаемые из адресной строки, в качестве идентификатора файла для включения. Как бы это не было удобно – это небезопасно, как минимум.

Рассмотрим случай-попытку «выдирания» содержимого файла путем подстановки путей в адресную строку.
Если вы подключаете файлы через передаваемый параметр в адресной строке (например, адрес выглядит так: http://www.hacked-resource.com/script.php?file=guestbook.php) – это явная недоработка программистов, писавших вашу систему. В 99% ваша система будет использована для взлома вашего сервера. Примером может служить такая комбинация: http://www.hacked-resource.com/script.php?file=././././file

Не менее интересным фактом является то, что php восприимичив к спецсимволам рода перевода строки и конца строки – т.е. программист обязан сам следить за безопасностью своих скриптов. PHP обрывает имя и путь до файла при встрече этих символов. Пример – вы желаете загрузить файл в скрипт, который принимает (формально, конечно же) только файлы с расширением jpeg… а подсунуть ему можно нечто вроде /home/jeurey/Desktop/tesfile.bin.jpg\0.jpg (где ‘\0′ является признаком конца строки).

Неродивые программисты, полагающиеся на проверки со стороны браузера очень разочаруются, ведь проверяемая строка (нулевой символ не воспримется js в текстовом поле) будет заканчиваться на jpeg/jpg… Так что, повнимательнее :)

Единственно-верным решением вашей проблемы может служить анализ POST/GET передаваемых данных на стороне сервера, перед началом обработки файлов. Например, просканировать все директории и составить список допустимых ко включению файлов, и на основе этих данных осуществлять фильтрацию. JS стоит использовать исключительно для помощипользователю, чтобы исключить его ошибку… Злонамерянные действия таким образом не отсеешь.

Безопасного Вам программирования ;)
Оригинал статьи «Безопасное программирование в PHP: подключаемые файлы»

Похожие посты:

{ 0 comments… add one now }

Leave a Comment

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Get Adobe Flash playerPlugin by wpburn.com wordpress themes