|
|
|
|
if( ! $_SERVER['HTTP_HOST'] == 'supersite.ru')
exit('abnormal host');
if( ! isset($_GET['file']))
exit('select the file you want');
if( ! file_exists($_SERVER['DOCUMENT_ROOT'] . $_GET['file']))
exit('file not found');
$file = $_SERVER['DOCUMENT_ROOT'] . $_GET['file'];
header("Content-type: " . mime_content_type($file));
header('Content-Disposition: filename='.basename($file));
echo readfile($file);
|
| |
|
|
|
|
|
|
|
для: yvgorshkov1
(29.09.2016 в 17:22)
| | Я бы ещё проверил файл по расширению, размеру(при загрузке файлов на сервер), допустимым символам в названии.
Вместо такого:
$file = $_SERVER['DOCUMENT_ROOT'] . $_GET['file'];
|
Делайте так:
$file = $_SERVER['DOCUMENT_ROOT'] . pathinfo($_GET['file'])['basename'];
|
Чтоб не было всяких /../ в имени файла | |
|
|
|
|
|
|
|
для: prodigy
(01.10.2016 в 14:40)
| | А какой смысл хранить на сервере файл, с родным именем...?
Во первых это небезопасно, а во вторых куча проверок нужна и они на 100% не гарантируют отсутствие вредоносного содержимого. Проще файл переименовывать и менять расширение, а оригинал названия и расширения хранить в БД. А при скачивании файла, просто обратно поставлять родное имя и расширение. Плюсы: безопасность и отсутствие геморроя при загрузке (даже если загружен эксплойт или вирусняк, с измененным расширением и названием, его не найти и не запустить). | |
|
|
|
|
|
|
|
для: Tamplier
(03.10.2016 в 12:53)
| | Не нужно бояться проверять загружаемый файл на имя и расширение и др..
Зная адрес файла изображения, как вы его запустите? Мне интересно. | |
|
|
|
|
|
|
|
для: prodigy
(07.10.2016 в 16:20)
| | Я говорил про эксплойты, а не про изображения
Кроме того мне приходилось видеть на взломанных сайтах которые просили переделать конструкции такого вида:
<?php
require_once('style/img.jpg');
|
А в якобы .jpg файле был обычный php код и эксплойт прекрасно работал маскируясь под картинку.
Так что не будьте преступно доверчивы, картинки перерисовывайте при загрузке, а файлы переименовывайте.
Если файл имеет расширение - .jpg .png .gif еще не означает что это безобидная картинка.
Безопасности много не бывает! | |
|
|
|
|
|
|
|
для: Tamplier
(10.10.2016 в 12:49)
| | В гугле порылся и нашел тройку интересных тем про загрузку файлов:
https://habrahabr.ru/post/44610/ - Безопасная загрузка изображений на сервер. Часть первая
https://habrahabr.ru/post/44615/ - Безопасная загрузка изображений на сервер. Часть вторая
https://habrahabr.ru/post/148999/ - Ваш сайт тоже позволяет заливать всё подряд? | |
|
|
|
|
|
|
|
для: prodigy
(01.10.2016 в 14:40)
| | а какая польза?) | |
|
|
|
|
|
|
|
для: Fart
(03.10.2016 в 23:58)
| | >а какая польза?)
??? | |
|
|
|
|
|
|
|
для: yvgorshkov1
(29.09.2016 в 17:22)
| | if( ! $_SERVER['HTTP_HOST'] == 'supersite.ru') - кто так учил писать?
введи следующее query_string: ?file=../../../../
и увидишь насколько безопасен твой код.
$file = $_SERVER['DOCUMENT_ROOT'] . pathinfo($_GET['file'])['basename']; - сомнительная часть | |
|
|
|
|
|
|
|
для: Fart
(03.10.2016 в 23:56)
| | Что там сомнительного?
Вообще-то я выше написал про проверку имени файла на допустимые символы. | |
|
|
|