Качване само на снимка и защита на Upload система за снимки.

novakabg

Registered
Добър ден написах нещо долу горе добро, та въпроса ми е как да огранича само .jpg и .png да ми се качва на дадената папка.


Кода по долу ще ви даде ясна представа за проверката ми.
Код:
	if (!empty($this->request->files['file']['name'])) { 
	$filename = basename(preg_replace('/[^a-zA-Z0-9\.\-\s+]/', '', 
	html_entity_decode($this->request->files['file']['name'], ENT_QUOTES, 'UTF-8'))); 
}

			$UpReSearch = file_get_contents($this->request->files['file']['tmp_name']); 
		if (preg_match('/\<\?php/i', $UpReSearch)) { 
				$json['error'] = $this->language->get('error_filetype'); 
				}
 
С проверка на Mime типа или на разширението:
PHP:
if(in_array(end(explode(".",$this->request->files['file']['name'])), ['png','jpg','jpeg'])) {  .. }

PHP:
if(explode("/",$this->request->files['file']['type'])[0] == 'image') {  .. }

PHP:
if(in_array($this->request->files['file']['type'], ['image/png','image/jpg','image/jpeg'])) {  .. }

Все варианти. Въпроса е на теб кой ти е най-удобно и лесно.. и какво ограничение точно ти трябва - само снимки или само png или и jpg и т.н.

Разбира се ще трябва да си пригодиш кода - Не знам дали $this->request->files['file']['type'] ще ти извади типа, просто ми се стори логично, ще трябва да си го нагласиш. Има и в интернет още десетки примери как може да ограничиш потребителя още на ниво избор на файла :) :idea: :?:

Едит: като те знам, сигурно ще ми пишеш и ще кажеш - аз от къде да знам кои са mime типовете на jpg и png файловете ?
- погледни тукЪ : https://www.sitepoint.com/web-foundations/mime-types-complete-list/ - теню, мерси, моля, нп :D :D
 
1. getImageSize
2. Задължително променяй името на качения файл(снимка). Така ако някой качи script.jpg.php, твоята логика ще го смени на nqkakvasnimka.jpg
3. Качения файл да бъде с права 644, за да попречиш изпълнението на executable файлове.
4. Бих ти препоръчал снимките да се качват извън root-а т.е. извън public_html директорията и ти да си ги одобряваш през админ или някаква друга система, след като си видял, че е снимка.
5. Сложи ограничение на размер и брой качвания за даден период от време, защото някой може да те нафлуди с прост скрипт, който ти качва 1000 снимки в минута...
6. Аз бих препоръчал в никакъв случай да не разчиташ на това, което ти изкарва $_FILES, mime тайпове и т.н. Абсолютно всичко там освен tmp_name може да бъде манипулирано.
7. В upload директорията можеш да си сложиш един .httaccess, който забранява изпълнението на .php файлове

п.п. Всяко едно от горните, само по себе си не е 100% хакер прууф.. Ако ги използваш заедно обаче ще създадат доста главоболия.

п.п.1. Когато става въпрос за ъплоуд форма препоръчвам много добре да обмислиш кое, как, защо, къде и т.н. Да разчиташ само на това да провериш разширението дали е .jpg или .png или .bmp и т.н. не е достатъчно.

п.п.2. Преди време бяха открили дупка в getImageSize(), но мисля, че оправиха.

Това е моето скромно мнение. Някой да ме поправя/добавя ако сметне, че греша :)
 
getimagesize и fileinfo_file правят едно и също, хубаво е и да минаваш снимката през imagecreatefrom....
 
Принципно знам методи за хакване главно на ниво kernel тей като не съм драскач на php или на javascript а работя главно с haskell и Python от както се помня.
Просто ми се иска да се науча и на тези езици и си правя тестове и изграждам, мисля че няма нищо лошо в това да се пита.
Прочем ако се чудите от колко години се занимавам на Python i Haskell ми от 9 години работя и за една фирма, но ми се иска да науча и нещо ново и реших да почна да уча php,mvc,javascript.
Благодаря много за отговорите, винаги едни и същи пишете това е хубаво че отговаряте благодаря! :?:


Относно съветите ще ги спазя всичките!
 

Back
Горе