php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
mime_content_type


 
ilch
08-02-2007, 20:50 
 
hallo,

damit keine bösen dateien hochgeladen werden lasse ich nur dateien zu mit der endung: rar, zip oder tar.

ausserdem prüfe ich mit der funktion mime_content_type ob der mime_type der datei stimmt (application/x-zip, aplication/x-rar, usw.)

ausserdem steht ja in der variablen:

_FILES['filename']['type'] der mime_type drin.

in diesem type steht oft octed stream drin was wohl so ein fehler type ist. also wenn man keinen richtigen type finden konnte.

die frage ist:
1. wer bestimmt den type im array _FILES, der Browser?
2. reicht es wenn ich nur mit mime_content_type und der endung prüfe? also brauch ich diesen type aus dem array _FILES überhaupt beachten oder einfach wegschmeissen weil da eh nur müll drin steht?

3. gibt es sonst noch irgendwelche methoden den type einer datei relativ sicher zu bestimmen?


danke für alle antworten ;)

 
penizillin
08-02-2007, 20:58 
 
1. ja
2. die endung ist schnuppe. mime_content_type und $_FILES zusammen sind schon recht zuverlässig, aber natürlich nicht hundertprozentig.
3. ja, die signatur der datei analysieren, das sind meistens die ersten paar bytes am anfang der datei. das ist aber ganz schön umständlich, zumal es viele verschiedene gibt.

pauschal-ratschlag: baue die anwendung so auf, dass es _egal_ ist, was hochgeladen wurde. wichtig ist nur, dass nichts von alle dem "ausgeführt" werden kann (shell, php, andere scriptsprachen, js beim client, etc).

bei mir dürften leute alles hochladen, format.exe, virus.vbs und p0rn.avi. wenn es ein bild ist, würd ich das als bild ausgeben, wenn es ein download werden soll - einfach zum download anbieten.

 
wahsaga
08-02-2007, 21:50 
 
Original geschrieben von ilch
ausserdem steht ja in der variablen:

_FILES['filename']['type'] der mime_type drin.
Nö - da steht das drin, was der Client dir angeben wollte.

 
onemorenerd
08-02-2007, 23:21 
 
system('file -zbik '.$_FILES['userfile']['tmp_name']) ;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:58 Uhr.