Я получаю загрузки видео и загрузки изображений:
Моя среда: LAMP
EDIT: я разрешу удаленную загрузку и загрузку POST
видео
EDIT2: Файлы, которые я получаю, будут переименованы, я не буду хранить оригинальные имена файлов.
Сначала я проверяю с $_FILES
mime $_FILES
.
Во-вторых, я проверяю с finfo_file
(если функция существует) снова mimetype ( PHP 5.3
) или с командным файлом оболочки.
Файл перемещается в общедоступный каталог, если он прошел вышеуказанные проверки.
Мой вопрос заключается в безопасной настройке? Или я могу что-то улучшить? Вчера я прочитал вчерашний день, это кажется для меня достаточно, но кто знает 🙂
Я новичок, когда приходит кодирование и безопасность 🙂
Я также могу рекомендовать следующее:
is_uploaded_file
Возвращает TRUE, если файл с именем filename загружен через HTTP POST. Это полезно для обеспечения того, чтобы злоумышленник не пытался обмануть сценарий в работе над файлами, на которых он не должен работать – например, /etc/passwd. Этот вид проверки особенно важен, если есть вероятность того, что что-либо сделанное с загруженными файлами может показать их содержимое пользователю или даже другим пользователям в одной и той же системе.
basename()
чтобы получить только имя файла, например basename(c:/fakepath/something.avi); // will return something.avi
basename(c:/fakepath/something.avi); // will return something.avi
поскольку некоторые люди пытаются обмануть компьютер, указав имена файлов в виде каталога.
Подробнее о basename()
:
Когда вы загружаете файл, вы хотите переместить файл в каталог, который вы хотите, например, в папку /uploads/
но злонамеренный пользователь может назвать файл, например something/hello.jpg
а затем, когда вы перемещаете файл с помощью move_uploaded_file($source,$destionation)
ваш $destination
будет /uploads/something/hello.jpg
и это вызывает проблемы. Чтобы вы получили только правильное имя файла, вам нужно использовать функцию basename()
которая возвращает hello.jpg
и т. Д.
$file_name = basename($_FILES["upload_ctrl"]["name"]); if(!move_uploaded_file($_FILES["upload_ctrl"]["tmp_name"],"uploads/".$file_name)) echo "Opps I cannot upload the file";
Для использования basename
посетите здесь: http://php.net/manual/en/function.basename.php
до тех пор, пока вы переименуете с вашим собственным именем и расширением файла и не имеете уязвимостей типа типа в вашем коде приложения (то есть: include ($ _ GET ['whatever']);), это довольно хорошо. вы также захотите убедиться, что все на вашем стеке сервера – это последняя версия (особенно все, что обрабатывает изображения / видео).
другие рекомендуют включать скрипт для работы с файлами, который выводит файл, вместо того, чтобы хранить файл в общей папке и ссылаться на файл непосредственно в ваших атрибутах src. некоторые также рекомендовали бы антивирусное сканирование всего.