Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] walidacja po typie mime
Forum PHP.pl > Forum > Przedszkole
hhg
piszę walidacje do uploadowanych plikow, i m.in sprawdzam typ mime takiego pliku. Mam wpuszczac tylko .xls, .doc, i pare innych. Niestety cos takiego:

  1. <?php
  2. if (
  3. $_FILES[$pointer]['type'] !== 'application/pdf' &&
  4. $_FILES[$pointer]['type'] !== 'application/msword' &&
  5. $_FILES[$pointer]['type'] !== 'application/vnd.ms-excel' &&
  6. $_FILES[$pointer]['type'] !== 'drawing/x-dwf' &&
  7. $_FILES[$pointer]['type'] !== 'model/vnd.dwf' &&
  8. $_FILES[$pointer]['type'] !== 'application/acad' &&
  9. $_FILES[$pointer]['type'] !== 'image/vnd.dwg' &&
  10. $_FILES[$pointer]['type'] !== 'image/x-dwg'
  11. ) {
  12. return new Notice(FALSE,'VALIDATE_UPLOADED_WRONG_FILE_FORMAT');
  13. }
  14. ?>


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
revyag
Napewno wina kompa ?
Dokumenty worda i excela i te z openoffica maja inne mime, pewnie tu masz problem.
hhg
to by sie zgadzalo smile.gif w takim raziej jaki jest typ mime do open office do xls i doc? wszedzie jest podane to Officowe..

czy moze sa to odt i ods z
http://framework.openoffice.org/documentat.../mimetypes.html
questionmark.gif
piotrekkr
To z manuala :
Cytat
$_FILES['userfile']['type']

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.

Nie powinno sie brac tego za bardzo wiarygodna informacje o typie mime bo jest ona sprawdzana jedynie po stronie przegladarki a ja mozna oszukac.
Kiedys tez myslalem o walidacji przez typ mime i doszedlem do tego: http://pl2.php.net/manual/pl/ref.fileinfo.php. Niestety nie na kazdym hostingu jest to rozszerzenie :/ A co do typow mime dokumentow to w necie poszperalem troche i znalazlem takie typy:
Kod
$allowed_mime_types = array (
                
                //images
                'image/bmp',
                'image/gif',
                'image/jpeg',
                'image/pjpeg',
                'image/png',
                'image/x-png',
                'image/tiff',
                'image/x-tiff',
                'image/x-windows-bmp',
                'image/vnd.djvu',
                'image/svg+xml',
                
                //documents
                'text/plain',
                'application/msword',
                'application/vnd.ms-powerpoint',
                'application/postscript',
                'text/sgml',
                'application/x-latex',
                'application/mspowerpoint',
                'text/rtf',
                'text/richtext',
                'application/vnd.ms-excel',
                'application/pdf',
                'application/postscript',
                'text/xml',
                'application/x-dvi',
                'application/vnd.oasis.opendocument.text',
                'application/vnd.oasis.opendocument.text-template',
                'application/vnd.oasis.opendocument.presentation',
                'application/vnd.oasis.opendocument.presentation-template',
                'application/vnd.oasis.opendocument.graphics',
                'application/vnd.oasis.opendocument.graphics-template',
                'application/vnd.oasis.opendocument.spreadsheet',
                'application/vnd.oasis.opendocument.spreadsheet-template',
                'application/vnd.oasis.opendocument.chart',
                'application/vnd.oasis.opendocument.formula',
                'application/vnd.oasis.opendocument.database',
                'application/vnd.oasis.opendocument.image',
                'application/vnd.sun.xml.writer',
                'application/vnd.sun.xml.writer.template',
                'application/vnd.sun.xml.calc',
                'application/vnd.sun.xml.calc.template',
                'application/vnd.sun.xml.draw',
                'application/vnd.sun.xml.draw.template',
                'application/vnd.sun.xml.impress',
                'application/vnd.sun.xml.impress.template',
                'application/vnd.sun.xml.writer.global',
                'application/vnd.sun.xml.math',
                'application/vnd.stardivision.writer',
                'application/vnd.stardivision.writer-global',
                'application/vnd.stardivision.calc',
                'application/vnd.stardivision.draw',
                'application/vnd.stardivision.impress',
                'application/vnd.stardivision.impress-packed',
                'application/vnd.stardivision.math',
                'application/vnd.stardivision.chart'
            );

W czesci documents sa tez uwzglednione typy mime staroffice office i openoffice. Jak znajdziesz jeszcze jakies inne to napisz smile.gif
hhg
ok dzieki,
w takim razie dla exportowanych z OO .doc jest to:
application/vnd.oasis.opendocument.text

a dla exportowanych .xls jest to:
application/vnd.oasis.opendocument.spreadsheet

?
hhg
ok, a jak sie zabezpieczasz przed podszywajacymi sie pod .doc i .xls plikami .php (spreparowany typ mime w przegladarce) ktore moga zniszczyc Ci bazę? bo na to jeszcze nie wpadłem
piotrekkr
nie tyle moga zniszczyc baze co poprostu umozliwi komus wrzucenie pliku ktorego typ jest zabroniony/nieporzadany smile.gif
hhg
chodzi mi wrzucenie pliku .php ktorego uruchomienie moze sie zle skonczyc.. winksmiley.jpg

znalazlem cos
http://pl2.php.net/mime-content-type
testowales to?
piotrekkr
Cytat
Ostrzeżenie

This function has been deprecated as the PECL extension Fileinfo provides the same functionality (and more) in a much cleaner way.


Zalecaja niby fileinfo bo tamta funkcja jest przestarzala. Poza tym jak wrzucasz jakikolwiek plik php czy txt czy jakis inny plik tekstowy na serwer to jest to plik o typie 'text/plain' wiec przez mime nie dowiesz sie czy jest to kod php. Najlepiej byloby gdybys poprostu zmienial nazwe po uploadzie na jakas inna koncowke ktorej nie przetwarza domyslnie apache wtedy nie wykonalby sie skrypt. mozna tez uzyc .htaccess i zabezpieczyc folder przed kimkolwiek innym niz apache i php wtedy nawet jakby wpisal ktos bezposredni adres do pliku ze skryptem w przegladarke to dostalby Access Denied a php ladnie by sobie moglo korzystac z plikow w tym folderze smile.gif
hhg
text/plain nawet nie wpuszczam

aha racja, w sume mozna nawet wyrzucic ten katalog poza public_html z plikami
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.