Ответ 1
В этом контексте есть два возможных значения для "исполняемого файла", и обе вещи необходимо настроить против.
-
исполняемый двоичный файл, который может запускаться из командной строки, введя имя файла в оболочку
-
Файл, который может быть прочитан и обработан как script веб-сервером.
Обработка двоично-исполняемого
Чтобы настроить на случай 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 является специфичным для веб-сервера.
Один из вариантов заключается в том, чтобы поместить загружаемый каталог за пределы веб-сайта, полностью опуская прямой доступ к файлам для загрузки и только для того, чтобы обслуживать их по серверному коду. Ваш код читает и перекликается с содержимым файла, тем самым гарантируя, что он никогда не обрабатывается веб-сервером script
Другой вариант - настроить ваш веб-сервер, чтобы не разрешать script обработку файлов в каталоге загрузки. Эта конфигурация является специфичной для веб-сервера. Однако, например, в Apache вы можете достичь этого, введя конфигурацию своего сервера:
<Directory "path-to-upload-dir">
AllowOverride None
Options -ExecCGI
</Directory>
AllowOverride Нет, это важно, поскольку он останавливает загрузку файла .htaccess в ваш каталог загрузок и перенастройку разрешений веб-сервера для этого каталога.