Я разработал скрипт менеджера загрузки / выгрузки.
Когда я загружаю файл методом POST, он сохраняется в папке с именем files , папка files находится в другой папке, которая называетсяменеджер загрузок.
Теперь кажется, что когда я загружаю через метод POST, 0666 CHMOD работает, когда я хочу переименовать, удалить файл, но папка менеджера загрузок и папка файлов должны быть 0777 CHMOD для этогоРабота.Теперь кто-нибудь может сказать мне, если это опасно?
1) Я получил отказ в all .htaccess, чтобы никто не мог получить доступ к каталогу файлов через браузер
2) Скрипт загрузки защищенимя пользователя и пароль, которые лицо, использующее сценарий, очевидно, изменит, поэтому только администраторы могут загружать, переименовывать, редактировать, удалять файлы и записи в базе данных MySQL.
При загрузке файла записьдобавляется в базу данных с такой информацией, как тип файла, имя файла, размер файла и т. д., а затем уникальный идентификатор (автоматически увеличивается с помощью MySQL) добавляется к файлу process.php, который получает файл из каталога, тип mime и т. д., который не раскрывается, process.php в основном выполняет проверки, чтобы определить, существуют ли запись и файлы, и если это так, принудительно загружает этот файл.
В основном URL-адрес загрузки имеет вид: wwww.mydomain.com/process.php?file= 57, выполняется проверка, чтобы убедиться, что идентификатор существует в базе данных и существует файл с хранилищем имен файловd в базе данных с этим идентификатором.
Теперь все это прекрасно работает при загрузке файла через форму с использованием метода POST, но я также добавил ручную загрузку, чтобы люди, которые хотят загрузить файл, размер которого больше, чемРазмер их веб-хоста позволяет им просто загрузить файл, например, через программу FTP, а затем просто вручную добавить имя файла и сведения о файле через форму в административной области, чтобы связать запись с файлом.Тогда проблема заключается в разрешении, потому что если файл загружен через FTP или каким-либо другим способом, которым они загружают файл с помощью сценария php, невозможно переименовать, удалите файл, если это потребуется в будущем, так как сценарий php не имеет правильных привилегий.Итак, из того, что я понял, единственный вариант - это сказать тем, кто использует скрипт, изменить файл chmod на 0777, чтобы он работал, я думаю, что это заставит его работать?
Но тогда у меня проблемаиз 0777 также является исполняемым.Этот скрипт позволяет загружать файлы любого типа, так как это скрипт менеджера загрузки / выгрузки, но в то же время я немного запутался со всеми этими проблемами, связанными с разрешениями, и с тем, что я должен делать на самом деле.Поскольку php ограничен максимальным размером загрузки, установленным хостом, я хочу добавить загрузку вручную, чтобы пользователи могли загружать файл другим способом и назначать файл записи базы данных, но затем, как указано, у меня возникает проблема при желании переименовать, удалитьфайл с помощью сценария php.
Я разработал сценарий для обнаружения таких проблем, уведомления пользователя и т. д., но я хотел бы попробовать и заставить этот сценарий выполнять всю работу или почти все без необходимостиукажите в руководстве, что администратору придется изменить файл на 0777, когда он хочет переименовать скрипт, удалите файл, хотя я не знаю, позволит ли изменение файла на 0777 действительно переименовать скрипт php,удалите его и т. д., но также проблема безопасности.
ОБНОВЛЕНО
Хорошо, спасибо, что заколол файл перед изменением его при загрузке?
Я просто использую chown () вокруг файла и ничего больше, и это сделает его принадлежащим процессу сервера и сделает его приватным?как я вижу, вы получили
chown apache:apache '/path/to/files' ;
Нужно ли добавлять бит apache: apache?
Я действительно думал об этом как о более простом решении, если администратор выполняет загрузку вручную, сообщая им, что ему придется переименовывать / удалять файл вручную, если это потребуется в будущем, поскольку у сценария не будет необходимых разрешений для этого,тогда это сделает это простым решением, так как сценарий manualupload может просто переименовать запись в базе данных, чтобы она оставалась связанной с файлом.Таким образом, не стоит беспокоиться о проблемах с правами доступа к файлу.
Просто поместите файл изменений пользователя вручную через ftp, например, из myfile.zip в somefile.zip, затем они редактируют запись базы данных для этого файла и изменяют имя файла на somefile.zipот старого имени файла myfile.zip, таким образом, все еще связано, но не беспокоится о проблемах с разрешениями.Как я уже читал, chown () не всегда работает или на него нельзя полагаться по какой-либо причине.