Как защитить каталог для загрузки изображений с веб-сервера? - PullRequest
15 голосов
/ 06 мая 2009

Для моего веб-приложения люди могут загружать изображения из веб-формы на мой веб-сервер.

Что мне следует установить параметры CHMOD для этого каталога загрузки изображений, чтобы люди могли загружать изображения (с веб-сервера) в этот каталог, но не выполнять файлы, которые они загружают по соображениям безопасности. Будут ли настройки chmod? :

chmod 744 directory/   

Ответы [ 2 ]

22 голосов
/ 06 мая 2009

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

  1. Исполняемый двоичный файл, который можно запустить из командной строки, введя имя файла в оболочке

  2. Файл, который может быть прочитанным и обработанным как сценарий веб-сервером.

Обработка исполняемого двоичного кода

Чтобы сконфигурировать случай 1 в системе un * x, вам необходимо убедиться, что ваш каталог загрузки и файлы в нем принадлежат пользователю веб-сервера и доступны только для чтения этому пользователю. Каталог должен быть исполняемым; это означает, что файлы в этом каталоге могут быть доступны). Если веб-пользователю необходимо перечислить файлы в каталоге, он также должен быть доступен для чтения. Конечно, он также должен быть доступен для записи, чтобы можно было создавать новые файлы.

Таким образом, восьмеричное множество, которое вы хотите, будет

chown <web-server-user> <upload-dir>
chmod 0700 <upload-dir>

Файлы не должны быть исполняемыми и должны быть доступны для чтения и записи только веб-сервером, поэтому они должны быть

chmod 0600 <uploaded-file>

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

chmod 0755 <upload-dir>
chmod 0644 <uploaded-file>

Обработка веб-сервера excutable

Кодирование для случая 2 зависит от веб-сервера.

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

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

<Directory "path-to-upload-dir">
  AllowOverride None
  Options -ExecCGI
</Directory>

AllowOverride None не важен, так как он останавливает загрузку файла .htaccess в ваш каталог закачек и повторную настройку разрешений веб-сервера для этого каталога.

0 голосов
/ 06 мая 2009

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

Обратите внимание, что «выполнить» в каталогах означает «иметь доступ к файлам внутри каталога», поэтому его необходимо установить, если вы хотите, чтобы ваш веб-сервер имел доступ к файлам внутри ...

...