2013-04-02 4 views
-1

Я изучаю php, а также выполняю проект, который включает загрузку файлов на сервер. Моя цель - сделать его максимально безопасным, поэтому, где вы рекомендуете сохранять все загруженные файлы. Файлы, которые будут загружены, будут PDF-файлами. Я где-то читал, что лучше сохранять загруженные файлы за пределами корневого документа и в каком-то другом месте, которое я читал, не легко получить доступ к файлам за пределами корня документа из php, поэтому я очень смущен. Любая помощь в направлении лучшей практики для преодоления этой ситуации приветствуется! Благодаря!Где я должен хранить загруженные файлы на сервере?

+0

Это вопрос о дискомфорте. Он не подходит для этого сайта. Это ваше решение и все зависит от вас. – shnisaka

+0

Опасность загрузки в корневой каталог документа в основном о том, что произойдет, если человек, выполняющий загрузку, предоставит вам скрипт PHP/CGI, и он отправится на этот URL. Человек будет заставлять вашу систему запускать свой код. Существует также опасность того, что они могут загрузить javascript или что-то еще, что может быть использовано для зла в другом месте вашего сайта, чтобы атаковать ваших клиентов. – Zoredache

ответ

1

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

Вот несколько способов разбиения на разделы дисков:

Vista/Windows Server 2008 (или большинство других окон серверов) : http://blogs.technet.com/b/steve_lamb/archive/2008/07/08/how-to-re-partition-a-hard-disk-under-vista-or-server-2008-without-having-to-re-install.aspx

Удачи вам!

1

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

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

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

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

Смежные вопросы