Правильные разрешения загрузки файлов PHP

0

Я разработал менеджер загрузки/загрузки script.

Когда я загружаю файл через метод POST, он сохраняется в папке с именем файлы, папка с файлами находится в другой папке, называемой диспетчером загрузки.

Теперь, когда я загружаюсь с помощью метода POST 0666, CHMOD работает, когда я хочу переименовать, удалить файл, но папка диспетчера загрузки и папка с файлами должны быть 0777 CHMOD для этого. Теперь может кто-нибудь сказать мне, опасно ли это?

1) Я получил отказ в .htaccess, поэтому никто не может получить доступ к каталогу файлов через браузер

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

Когда файл загружается, запись добавляется в базу данных с информацией типа файла, имени файла, размера файла и т.д., а затем уникальный уникальный идентификатор (автоматически увеличиваемый MySQL) добавляется в файл process.php, который получает файл из каталога и типа mime и т.д., которые не обнаружены, process.php в основном выполняет проверки, чтобы увидеть, существуют ли записи и файлы, и если это так загружает этот файл.

В принципе URL-адрес загрузки похож: wwww.mydomain.com/process.php?file=57, выполняется проверка, чтобы убедиться, что идентификатор существует в базе данных и что файл существует с именем файла, хранящимся в базы данных с этим идентификатором.

Теперь все это прекрасно работает при загрузке файла через форму с использованием метода POST, но я также добавил загрузку вручную, поэтому для людей, которые хотят загрузить файл, размер которого больше размера, их веб-хост позволяет просто загружать файл через например, FTP-программу, а затем просто вручную добавьте имя файла и данные файла через форму в области администрирования, чтобы связать запись с файлом. Проблема заключается в том, что проблема возникает из-за того, что если файл загружается с помощью FTP или каким-либо образом он загружает файл с помощью php script, он не может переименовать, удалите файл, если потребуется, в будущем, поскольку PHP скрипт не имеет правильного привилегии. Итак, из того, что я собираю, единственный вариант заключается в том, чтобы сообщить тем, кто использует script, чтобы изменить файл chmod на 0777, чтобы он работал, я думаю, что это сработает?

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

Я разработал script, чтобы обнаружить такие проблемы и уведомить пользователя и т.д., но я хотел бы попытаться сделать этот script всю работу с ногами или почти все, не указав в руководстве, что admin должен будет chmod файл до 0777, когда они хотят, чтобы script переименовал, удалил файл, хотя я не знаю, может ли только chmodding файл до 0777 фактически разрешить переименование PHP скрипт, удалить его и т.д., но и безопасность - это проблема.

ОБНОВЛЕНО

Хорошо, спасибо, поэтому запустите файл перед тем, как его загрузить при загрузке?

Я просто использую chown() вокруг файла и ничего больше, и это сделает его владельцем процесса сервера и сделает его закрытым? как я вижу, вы получили

chown apache:apache '/path/to/files' ;

Нужно ли добавить бит apache: apache?

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

Просто поместите файл пользовательских изменений вручную через ftp, например, из файла myfile.zip в somefile.zip, затем они отредактируют запись db для этого файла и измените имя файла на somefile.zip из старого имени файла myfile.zip, таким образом все все еще связаны, но не стоит беспокоиться о проблемах с разрешением. Поскольку я также читал, что chown() не всегда работает или не может полагаться по какой-либо причине.

Теги:
file
file-upload
file-permissions
ftp

2 ответа

1
Лучший ответ

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

Храните файлы в отдельной папке вдали от структуры каталогов, в которой хранятся ваши файлы PHP.

Что касается разрешений в каталоге, существует три способа настройки разрешений в папке:

  • Сделайте его доступным для всего мира (chmod 0777 '/path/to/files/')

    Это не рекомендуется, так как оно имеет серьезные последствия для безопасности, особенно на не выделенном сервере; любой, у кого есть учетная запись, или может передать процесс на сервере для записи/удаления в эту папку, сможет изменить его содержимое.

  • Сделайте его временным (chmod 1777 '/path/to/files/')

    Это также относится к проблеме безопасности, но менее важно, чем вариант 1 по следующей причине: пользователи не могут изменять каталог - только файлы, которыми они владеют.

  • Сделать это принадлежащим серверному процессу и сделать его приватным (chown apache:apache '/path/to/files' ; chmod 0700 '/path/to/files')

    Это, возможно, лучшее решение.

  • 0
    Привет, спасибо за такой быстрый ответ, я был ограничен в символах, так что обновил мой оригинальный пост, если вы не возражаете прочесть его и ответить, что было бы здорово. Я выделил ОБНОВЛЕНО жирным шрифтом, чтобы вы могли видеть, о чем я сейчас спрашиваю. Спасибо PHPLOVER
  • 0
    chown работает, только если вы вошли в систему под учетной записью суперпользователя (т.е. root), под которой PHP никогда не должен работать; chown изнутри PHP либо потерпит неудачу, либо не даст эффекта.
Показать ещё 1 комментарий
0

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

  • 0
    Привет, на самом деле не отвечает на мой вопрос, который я обновил в исходном сообщении, как было сказано ранее, назад к amphetamachine. Привет, Спасибо за такой быстрый ответ, я был ограничен в символах, поэтому я обновил исходное сообщение, если вы не против прочитать его и ответить это было бы прекрасно. Я выделил ОБНОВЛЕНО жирным шрифтом, чтобы вы могли видеть, о чем я сейчас спрашиваю. Спасибо PHPLOVER, будет ждать ответ от этого спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню