Я видел, как много загружаемых форм взломали, а некоторые из них действительно неплохие проверки безопасности загружаемого файла (по крайней мере, я так думаю), но кому-то удалось загрузить файл PHP.
Мне было интересно: есть ли способ загрузить файл в папку uploads с полномочиями 777? Я думаю об использовании HTTP PUT.
В общем 777 примерно так же небезопасно, как и получается … это означает, что любой может читать и писать в ваши файлы.
HTTP PUT не является по своей сути более безопасным, чем HTTP POST, если вы разрешаете загружать загруженные файлы на ваш сервер.
В целом, если вы разрешаете произвольные файлы, вы должны делать очень хорошую проверку файлов на стороне сервера, и использование chroot на сервере было бы разумным.
По правде говоря, я обычно устанавливаю все, доступное в Интернете для 644, принадлежащих пользователю веб-сервера.
Разрешения для папки – это просто, чтобы убедиться, что ваш пользователь httpd / Apache может писать в эту папку. На самом деле вам не нужно chmod 777 для вашей папки хранения. Просто убедитесь, что вы установили владельца в root и группу для пользователя Apache / httpd, который вы используете, или просто просто установите владельца папки для вашего пользователя Apache.
chmod 774 /upload/folder
: записывается для владельца и группы, а остальные просто читаются.
PHP: если каким-то образом эта папка относится к корневой папке пользовательского документа, вы можете отключить механизм PHP для этого конкретного виртуального хоста.
Если эта папка является частью вашей корневой папки документа системы / приложения, то редактирование файла .htaccess и использование директивы removeHandler Apache могут сделать трюк.
Вы не нуждаетесь и не должны иметь разрешение 777 на папку для загрузки. Этого должно быть достаточно, чтобы он был доступен только для чтения и записи для пользователя, на котором работает веб-сервер (с обычными www-данными apache / debian). Кроме того, вы должны отключить (например, через .htaccess) все, что вы не хотите в этой папке, например, выполнить PHP-скрипты (так что даже если происходит загрузка пользователем PHP, он не может быть выполнен). HTTP PUT не изменяет вашу проблему 777, потому что файл все равно будет находиться после его загрузки.