Защита на ъплоуд?

lam3r4370

Registered
Как да защитя качване на изображения?Засега слагам basename и @$ext = end(explode(".",$_FILES['kachi'],['name'])) и проверявам с if дали разширението е това ,което е позволено.Има и вариант с преименуване с md5(time()) ,ама после как да направя проверка дали съществува такова изображение?
 
$_FILES['kachi']['type'] съдържа MIME типа на файла, той е единствения сигурен източник за самата структура на файла, потърси малко в инернет кои типове файлове какви MIME стойности притежават и ги използвай за да защитиш скрипта си.
 
CBeTHaX каза:
$_FILES['kachi']['type'] съдържа MIME типа на файла, той е единствения сигурен източник за самата структура на файла, потърси малко в инернет кои типове файлове какви MIME стойности притежават и ги използвай за да защитиш скрипта си.
Да ама не, и то може да се манипулира.
Аз бих ти предложил нещо да отвориш файла и да търсиш в него php,shell и други "вредители", но ако винаги ти "лепиш" разширението на файла и разширението е картинно няма как да се зареди скрипта.
 
Значи като извадиш разширението на файла с експлоде просто го залепи така винаги ще е картинка и няма да се зарежда скрипт ако има в нея, а за да отвориш картинката може да ползваш file_get_contents() или друго подобна ф-я, като го отвориш знаеш как да търсиш (preg_match/_all,explode и т.н.).
 
Ето пример:
$ext = end(explode(".",$_FILES['kachi']['name'])); // така взимаш разширението
if($ext == "jpg")
{
$new_name = time().rand(0,9999).".".$ext;
}
така си сигурен, че е jpg изображение.
ето ти един пример, така няма шанс да се паднат 2 едни и същи имена на снимки, защото първо слагаш времето после произволно число ...
 
Ами ако има друга точка в името ?
Имаше една функция от str която взима последната точка, но сега не ми се отваря зенда да я видя.

strrpos е функцията
 
SveXteZ каза:
Ами ако има друга точка в името ?
Имаше една функция от str която взима последната точка, но сега не ми се отваря зенда да я видя.

strrpos е функцията

end() :?:
 
lam3r4370 каза:
SveXteZ каза:
Ами ако има друга точка в името ?
Имаше една функция от str която взима последната точка, но сега не ми се отваря зенда да я видя.

strrpos е функцията

end() :?:
аа значи толкова и съм гледал :roll:
 
lam3r4370 каза:
@СВеТНаХ -
The mime type of the file, if the browser provided this information. An example would be "image/gif". This mime type is however not checked on the PHP side and therefore don't take its value for granted.

Логично е , системата не може да определи дали даден текстов файл не съдържа PHP код вътре.. тук говорим за елементарна разлика между вредни файлове / изображения
 
Чел съм една книга, pdf точно по този проблем
Ще се пробвам да я намеря и ще ти дам линк ако успея

Там се споменаваше колко лесно се разбива mime защитата, за коментарите в картинки и подобно

Най-сигурно е да проверяваш типа с exif_imagetype и да проверяваш разширението едновременно
Ако не показваш името (името е произволно, изкарваш картинката през php скрипт дето я readfile-ва за да не се вижда оригиналното url) и си супер

edit:
http://www.scanit.be/uploads/php-file-upload.pdf
 

Back
Горе