Я разработал менеджер загрузки/загрузки 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() не всегда работает или не может полагаться по какой-либо причине.
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'
)
Это, возможно, лучшее решение.
Просто расслабьтесь и наслаждайтесь.
На многих общих хостингах это единственное возможное решение.
Существует еще один вариант - попросить пользователя передать ftp и использовать ftp для копирования файлов из tmp, как это делает wordpress. Но я думаю, что это еще менее безопасно.
chown
работает, только если вы вошли в систему под учетной записью суперпользователя (т.е. root), под которой PHP никогда не должен работать;chown
изнутри PHP либо потерпит неудачу, либо не даст эффекта.