Загрузка аудиофайлов с помощью PHP

#php #file-upload

#php #загрузка файла

Вопрос:

Мне нужно создать веб-сайт, который позволит зарегистрированным пользователям загружать аудиофайлы. Интересно, существует ли какая-либо пуленепробиваемая практика в отношении безопасности. Сайт построен на PHP

Комментарии:

1. О какой безопасности вы беспокоитесь? Ограничение доступа к файлам, предотвращение загрузки нелегального контента, DRM и т.д.?

Ответ №1:

Проверьте mime-тип загружаемого файла

 mp3 -> audio/mpeg
  

Подробнее здесь:http://www.w3schools.com/media/media_mimeref.asp

Ответ №2:

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

Как сказал Данзан, вы захотите проверить MIME-тип файла, используя некоторый код, подобный этому:

 if ($_FILES["audioUpload"]["type"] == "audio/mpeg") {
//proceed with upload procedure
} else {
echo "Only mp3's are allowed to be uploaded.";
}
  

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

Ответ №3:

Проверка типа файла на пуленепробиваемость обеспечивается с помощью комбинации getimagesize, расширения fileinfo и функции mime_content_type (свойство Nette Framework):

 // $file is absolute path to the uploaded file
$info = @getimagesize($file); // @ - files smaller than 12 bytes causes read error
if (isset($info['mime'])) {
   return $info['mime'];
} elseif (extension_loaded('fileinfo')) {
   $type = preg_replace('#[s;].*$#', '', finfo_file(finfo_open(FILEINFO_MIME), $file));
} elseif (function_exists('mime_content_type')) {
   $type = mime_content_type($file);
}
return isset($type) amp;amp; preg_match('#^S /S $#', $type)
    ? $type 
    : 'application/octet-stream';
  

Вы не можете доверять никаким данным, поступающим от клиента, потому что их можно легко подделать.

Комментарии:

1. Именно это я и думал о данных, отправленных пользователем. Я уже проверил расширение файла, а также тип mime, но все еще не уверен, все ли это необходимо для предотвращения внедрения вредоносного кода на сервер

2. Я думаю, что в этом случае сервер безопасен (вы не можете запустить аудиофайл как PHP-скрипт), но неизбежной проблемой все равно будет то, что пользователи могут загрузить аудиофайл с содержащимся вредоносным кодом в случае обнаружения какой-либо уязвимости (которая может быть опасна для пользователей, загружающих этот файл с вашего сервера). Но я не думаю, что вам нужно беспокоиться об этом.

Ответ №4:

Вы можете загружать что угодно с помощью PHP. Вот пример:http://www.tizag.com/phpT/fileupload.php

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