В этом контексте есть два возможных значения слова «исполняемый файл», и оба должны быть настроены против.
Исполняемый двоичный файл, который можно запустить из командной строки, введя имя файла в оболочке
Файл, который может быть прочитанным и обработанным как сценарий веб-сервером.
Обработка исполняемого двоичного кода
Чтобы сконфигурировать случай 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 в ваш каталог закачек и повторную настройку разрешений веб-сервера для этого каталога.