Заливка файлов на сервер. Безопасность

7910
На сайте с 18.07.2007
Offline
181
1177

Есть проект типа конструктора сайтов, где все пользователи работают из-под одного юзера (php установлен как модуль апача). По многочисленным просьбам клиентов пришлось сделать файловый менеджер, теперь каждый клиент может заливать файлы в свою папку. Но посколько все пользователи фактически работают под одним юзером апача есть вопросы по безопасности. Я сделала так, что возможна заливка файлов определенных расширений (gif, jpg, png, rar, zip, tar, doc, rtf и т.д.).

Вопрос: безопасно ли это? Может ли кто-то из клиентов как-то извратиться, залить нехороший файл и запустить вредоносный код? Где можно почитать о безопасности заливки файлов на сервер?

ML
На сайте с 05.09.2008
Offline
107
#1

gif, jpg, png, doc, rtf - вполне безопасна

.zip .rar - могут содержать (самораспаковывающиеся архивы) всё что угодно, начиная от шелла (скрипт узнает ваши пароли) до троянов.

Решение - запретить добавлять архивы, добавив нужные разрешения - .djvu, .avi, .flv и т.д.

P
На сайте с 15.08.2008
Offline
15
#2
7910:
Я сделала так, что возможна заливка файлов определенных расширений (gif, jpg, png, rar, zip, tar, doc, rtf и т.д.).
Вопрос: безопасно ли это? Может ли кто-то из клиентов как-то извратиться, залить нехороший файл и запустить вредоносный код?

Безопасно, если речь идет только о запуске этого нехорошего кода на стороне Вашего сервера.

7910:
Где можно почитать о безопасности заливки файлов на сервер?

Так сразу не скажу, гугл знает.

В любом случае не мешает освежить память:

http://ru.php.net/manual/en/function.move-uploaded-file.php

http://php.about.com/od/advancedphp/qt/upload_security.htm

http://httpd.apache.org/docs/2.2/mod/mod_mime.html#addtype

P
На сайте с 18.10.2007
Offline
89
pwd
#3

содержание настроек .htaccess (или других настроек http-сервера) действующего на директории куда грузится?

P
На сайте с 15.08.2008
Offline
15
#4
pwd:
содержание настроек .htaccess (или других настроек http-сервера) действующего на директории куда грузится?

Файл .htaccess закачивается в корень папки, начиная с которой эти настройки должны действовать.

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

7910
На сайте с 18.07.2007
Offline
181
#5
.zip .rar - могут содержать (самораспаковывающиеся архивы) всё что угодно, начиная от шелла (скрипт узнает ваши пароли) до троянов.
Решение - запретить добавлять архивы, добавив нужные разрешения - .djvu, .avi, .flv и т.д.

Это не взаимозаменяемые файлы. В моем случае заливка файлов делается для возможности клиентов торговать в магазине виртуальными товарами. А это не всегда фильмы или электронные книги, чаще всего шароварщики своими программами торгуют, поэтому без архивов не обойтись.

pwd:
содержание настроек .htaccess (или других настроек http-сервера) действующего на директории куда грузится?

.htaccess лежит в папке на уровень выше от папок для загрузки файлов каждого клиента.

Где лежит .htaccess имеет значение? Этим могут как-то воспользоваться или его переопределить? Создание и редактирование файлов без расширения я запретила, подниматься на уровень выше директории для заливки файлов тоже вроде запретила. Правда по тупому – только невозможностью .. в пути.

edogs software
На сайте с 15.12.2005
Offline
775
#6

Самое безопасное это хранить файлы в недоступном для юзеров месте.

1) База данных:) Отдача скриптом и нагрузка.

2) Папка выше www. Отдача скриптом и нагрузка чуть меньше чем в 1-ом варианте.

3) Просто отдача скриптом, папка закрыта от юзеров.

4) Отдача файлов напрямую, но запрещено выполнение скриптов в папке где они хранятся.

Первый вариант самый безопасный с точки зрения серверной безопасности и универсальный и простой, можно просто хранить все так, как оно пришло, без фильтраций и еще чего-бы то ни было.

Вы правильно делаете что фильтруете по расширению файла (некоторые почему-то считают что достаточно проверять приходящий mime тип, хотя это просто данные приходящие от пользователя, а не "подлинный" mime тип - из-за этого кстати в доброй половине виденных нам скриптов аплоада есть дыра).

Но не забывайте, что в фильтрации по расширению есть небольшой "нюанс" (подробнее тут http://httpd.apache.org/docs/1.3/mod/mod_mime.html ). Например файл http://zc.tj/temp/a.php.mmf - выполнится как пхп скрипт, хотя некоторые скрипты восприняли бы его как файл с разрешением mmf.

По поводу "запрещения подниматься выше - запретом в пути", через realpath? Тогда в принципе правильно. Только еще есть определённый смысл ограничить права для вышестоящих папок, что бы скрипты в принципе туда ничего не могли загружать. И конечно нужно отключить выполнение скриптов - так же в .htaccess, т.к. "пути файлов неисповедимы" и лучше перестраховаться от попадания скрипта в папку, чем верить что он туда не попадет.

И конечно все имена файлов лучше не брать "от юзера", а тупо переименовывать их в a-z0-9_- буковки. Тоже на всякий случай.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
[Удален]
#7
edogs:
Самое безопасное это хранить файлы в недоступном для юзеров месте.
1) База данных:) Отдача скриптом и нагрузка.
2) Папка выше www. Отдача скриптом и нагрузка чуть меньше чем в 1-ом варианте.
3) Просто отдача скриптом, папка закрыта от юзеров.
4) Отдача файлов напрямую, но запрещено выполнение скриптов в папке где они хранятся.

Лучше всего отдавать файлы не напрямую и не скриптом, а nginx-ом, если он установлен. Это быстрее, чем просто отдача скриптом и надежнее чем отдача напрямую. Подробнее об это способе можно прочитать здесь.

7910
На сайте с 18.07.2007
Offline
181
#8

edogs, спасибо, много нового почерпнула

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий