Чтобы обезопасить
Переместить все файлы независимо от типа из вебсервера.
- Dont обеспечивает прямой доступ к файлу, используйте загрузчик для отправки файла пользователя, если у вас есть возможность скачать.
- Force загрузки
Есть сценарий, download.php или любой другой, получить идентификатор файла, проверьте, кто вошел в систему, и если все проверки, извлечь файл, прочитать его в браузере, и отправить соответствующие заголовки загрузки.
header('Content-type: application/octet-stream');
header('Content-disposition: attachment; filename=file.ext');
header("Content-Length: " . filesize('../not_in_web_root/file.ext'));
header("Content-Transfer-Encoding: binary");
readfile('../not_in_web_root/file.ext');
exit;
- только принимать файлы, которые вы хотите принять, проверяя расширение и MimeType, где это возможно. Его даже нормально даже принимать php, если вы не разрешаете ему выполнять или предоставить пользователю прямой доступ к нему.
Если только позволяет изображения затем использовать функцию как getimagesize()
, если она имеет размер Сво изображения, но до сих пор не обеспечивают прямой доступ к нему, как PHP может быть встроен в него.
Если вы предлагаете пользователям файловую систему, сделайте ее виртуальной, основанной на значениях в базе данных, не имеющих доступа к реальным файлам.
Что вы должны знать о безопасности загрузки файлов: [прочитать это (PDF)] (http://www.net-security.org/dl/articles/php-file-upload.pdf) –
Какие загрузки вы ожидаете? Изображения или что-нибудь еще? –
Возможный дубликат [Угрозы безопасности с загрузками] (http://stackoverflow.com/questions/11061355/security-threats-with-uploads) и [Как получить тип содержимого файла в PHP?] (Http: //stackoverflow.com/questions/1232769/how-to-get-the-content-type-of-a-file-in-php) – deceze