Безопасная загрузка файлов и их проверка

Я получаю загрузки видео и загрузки изображений:

Моя среда: LAMP

EDIT: я разрешу удаленную загрузку и загрузку POST видео

EDIT2: Файлы, которые я получаю, будут переименованы, я не буду хранить оригинальные имена файлов.

  1. Сначала я проверяю с $_FILES mime $_FILES .

  2. Во-вторых, я проверяю с finfo_file (если функция существует) снова mimetype ( PHP 5.3 ) или с командным файлом оболочки.

  3. Файл перемещается в общедоступный каталог, если он прошел вышеуказанные проверки.

Мой вопрос заключается в безопасной настройке? Или я могу что-то улучшить? Вчера я прочитал вчерашний день, это кажется для меня достаточно, но кто знает 🙂

Я новичок, когда приходит кодирование и безопасность 🙂

Я также могу рекомендовать следующее:

  1. is_uploaded_file Возвращает TRUE, если файл с именем filename загружен через HTTP POST. Это полезно для обеспечения того, чтобы злоумышленник не пытался обмануть сценарий в работе над файлами, на которых он не должен работать – например, /etc/passwd. Этот вид проверки особенно важен, если есть вероятность того, что что-либо сделанное с загруженными файлами может показать их содержимое пользователю или даже другим пользователям в одной и той же системе.

  2. 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. некоторые также рекомендовали бы антивирусное сканирование всего.