Как стать автором
Обновить

Загрузка файлов и open_basedir: почему надо пользоваться стандартными функциями

Время на прочтение2 мин
Количество просмотров38K
Казалось бы вопрос загрузки файлов на сервер обсосан до косточек, но одно недавнее событие заставило меня в этом усомниться.

Некоторое время назад в целях повышения безопасности на наших серверах была включена настройка PHP open_basedir. После этого многие PHP-приложения перестали загружать файлы на сервер.

По ссылке много букв (которые всё-таки рекомендуется прочитать), здесь же напишу кратко:
  • open_basedir ограничивает список файлов, к которым может обращаться PHP, указанным деревом директорий.
  • open_basedir может применяться независимо от того, используется защищенный режим или нет.

После включения этой настройки на наших серверах, скрипты оказались «заперты» внутри директории своего сайта (виртуального хоста). Файлы же продолжали загружаться в директорию для временных файлов, которая располагалась на другом разделе и не входила в дерево директорий сайта. Соответственно все скрипты, пытавшиеся обратиться к загруженным файлам через элемент tmp_name переменной $_FILES, терпели неудачу.

Конечно же язык PHP разрабатывают неглупые люди, поэтому действие open_basedir не распространяется на функции is_uploaded_file и move_uploaded_file, которые, собственно, и предназначены для работы с загруженными файлами.

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

Обычно это делается в тех случаях, когда загруженный файл не предполагается хранить на сайте. Как правило это импорт прайс-листов (csv, xls), картинки, которые конвертируются перед сохранением в дереве файлов сайта. Часто $_FILES используется для проверки загруженной картинки (getimagesize) перед вызовом move_uploded_file.

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

P. S. Кто-то может сказать «нефиг так конфигурировать сервера, что скрипты перестают работать». Однако я считаю, что если настройка есть, то кто-нибудь её обязательно использует. И если ваша программа после этого перестанет работать, то камни полетят в вас. Оно вам (нам) надо?
Теги:
Хабы:
+56
Комментарии33

Публикации

Изменить настройки темы

Истории

Работа

PHP программист
162 вакансии

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн