[php] typy mime, walidacja

0

piszę walidacje do uploadowanych plikow, i m.in sprawdzam typ mime takiego pliku. Mam wpuszczac tylko .xls, .doc, i pare innych. Niestety cos takiego:

		if (
			$_FILES[$pointer]['type'] !== 'application/pdf' &&
			$_FILES[$pointer]['type'] !== 'application/msword' &&
			$_FILES[$pointer]['type'] !== 'application/vnd.ms-excel' &&
			$_FILES[$pointer]['type'] !== 'drawing/x-dwf' &&
			$_FILES[$pointer]['type'] !== 'model/vnd.dwf' &&
			$_FILES[$pointer]['type'] !== 'application/acad' &&
			$_FILES[$pointer]['type'] !== 'image/vnd.dwg' &&
			$_FILES[$pointer]['type'] !== 'image/x-dwg'
		) {
			return new Notice(FALSE,'VALIDATE_UPLOADED_WRONG_FILE_FORMAT');
		}

nie pozwala na jednym kompie wpuścic pliku .xls i .doc a na drugim pozwala!! nie rozumiem dlaczego
czy macie jakies pomysly dlaczego tak się dzieje?

z gory dzieki za pomoc

0

Przeglądarka nie wysyła prawidłowego typu MIME. Prawdopodobnie wyślesz tylko poprawnie z komputera z excelem/wordem. I być może że tylko z "jedynej słusznej przeglądarki".

0

aha dzieki, w takim razie jak zwalidowac czy nie jest wysylany .exe pod rozszerzeniem .doc i w ogóle zmusic uzytkownika do wyslania jedynie .doc, .xls, cadowych i .pdf?

0

Zazwyczaj najlepszym sposobem jest sprawdzanie po naglowku pliku (jezeli jest). Czesto sa to pierwsza 2-kilka bajty (typu GIF, MZ, PE, itp). No i druga kwestia, ze takie sprawdzanie ciezko (niemozliwe?) oszukac.

0

genialne johny_bravo

przyczyna tego moze byc jeszcze jedna

0

@johny_bravo: Z tym niemożliwe, to przesadzasz :) Wystarczy, że użytkownik będzie wiedział, jak działa zabezpieczenie (albo się domyśli) i dopisze te kilka pierwszych bajtów, informując odbiorcę, że trzeba je usunąć :)

0

Dlatego dalem pytajnik, bo nie bylem pewien ;) Ale jak poinformowac odbiorce, ze trzeba je usunac? Wrzucasz plik, skrypt kopiuje i tyle - nic tam nie jest po drodze usuwane...

0

A to zależy, przed czym to ma być zabezpieczenie. Jeśli to jest uploadowanie plików, żeby ktoś mógł je sobie ściągnąć, to możesz dodać nagłówek powiedzmy worda, wysłać, a ktoś inny sobie ściągnie i ten nagłówek wytnie. Wówczas uzyskujesz sposób na przesyłanie plików dowolnego typu. Jeśli ma to być zabezpieczenie przed wykonywaniem zdalnego kodu - to tak średnio pomoże - do cgi-bin i tak raczej nie będzie tego wgrywać, a skrypt PHP można poprzedzić nagłówkiem przykładowo Worda, co uniemożliwi kilka opcji (na przykład zmianę nagłówka HTTP), ale większość operacji i tak będzie można wykonać - tutaj jedynym zabezpieczeniem zostaje rozszerzenie, więc w skrypcie trzeba zadbać, by nie zaincludował pliku uploadowanego, niezależnie od jego typu (bo można wykonać na przykład include('test.txt'); i jeśli w test.txt będzie kod php, to zostanie on wykonany).

0

No tak, w tym sensie to co innego. Ja w sumie nie myslalem za bardzo przed czym to zabezpieczenie. Raczej myslalem w kontekscie - jezeli chcesz, zeby zuploadowany plik byl do uzytku (czyli upload tylko dla mnie) to takie zabezpieczenie ma rece i nogi. Czyli np. upload tylko dokumentow do urzedu - nikt nie wrzuci exeka, ktorego uruchomi nieswiadomy urzednik.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.