Mime-Type ermitteln
Chris (c)
- php
0 AndreD0 Cheatah0 AndreD0 Thoralf Knuth0 AndreD
0 wahsaga
0 Stefan Bach
Hallo Selferinnen und -außen,
wie kann ich den Mime-Type einer Datei ermitteln, die als Attachment mit einer eMail versandt erden soll?
Fall 1: die Datei wird tatsächlich über das Mailform hochgeladen, dann gibts ja in $_FILES["feldname"]["type"] einen Eintrag. Wie sicher ist der? Woher kommt der? Wird der vom Server ermittelt oder wird der vom Client mitgeschickt?
Fall 2: Es wird nur ein Dateiname, Pfad, oder Index aus einer Liste mit dem Mailformualrt mitgeschickt. Der Server hat die Datei bereits und lädt sie selber. Wie kann ich dann ermitteln, welchen Mime-Type ich angeben muss?
Kann man ersatzweise immer application/octet-stream nehmen? Was macht das für den Mailempfänger für Unterschiede? Auf Grund welcher tatsache werden die Anzeigeprogramme für Attachments auf dem Client assoziiert? Mime-Type oder Dateiendung?
Liebe Grüße
Chris (C)
Hallo Chris,
Fall 1: die Datei wird tatsächlich über das Mailform hochgeladen, dann gibts ja in $_FILES["feldname"]["type"] einen Eintrag. Wie sicher ist der? Woher kommt der? Wird der vom Server ermittelt oder wird der vom Client mitgeschickt?
Sollte meiner Meinung nach vom Client kommen, andersherum entscheidet der ja auch was er mit einer best. Datei nach dem Empfang anfängt. Also text/html, image/gif selber öffnen application/gzip zum download für zip-proggie, application/mspowerpoint geht an powerpoint usw...
Fall 2: Es wird nur ein Dateiname, Pfad, oder Index aus einer Liste mit dem Mailformualrt mitgeschickt. Der Server hat die Datei bereits und lädt sie selber. Wie kann ich dann ermitteln, welchen Mime-Type ich angeben muss?
Serverseitig kannst Du das IMHO nur über die Dateiendung. In die Datei reinschauen wird wohl technisch auch möglich sein aber ob es den Aufwand rechtfertigt? Du könntest Deine Endungen und den jeweiligen Dateityp in einem Array ablegen und bei Bedarf darüber auslesen? Würde Dir das was bringen?
Kann man ersatzweise immer application/octet-stream nehmen?
Ist glaub ich für ausführbare Dateien bestimmt. Bei mir wurde es aber auch schon bei TIFF-Bildern angezeigt, somit eher nicht so zuverlässig?
Was macht das für den Mailempfänger für Unterschiede? Auf Grund welcher tatsache werden die Anzeigeprogramme für Attachments auf dem Client assoziiert? Mime-Type oder Dateiendung?
Also unter Windows würde ich mal sagen das der doch mehr nach der Endung geht. Ich hab mal kurz ein jpg in .htm umbenannt und prompt ändert sich nat. 1. der Dateityp und 2. will nun auch der IE, Opera und Mozialla das Bild als Textdatei interpretieren. Evt. Sache des OS, vielleicht würde das unter Linux nicht funktionieren und es würde immer noch das Bild angezeigt werden?
Gruss AndreD
Hi,
Sollte meiner Meinung nach vom Client kommen,
vertraue niemals etwas, das vom Client kommt. Es sollte *unbedingt* selbst geprüft werden.
In die Datei reinschauen wird wohl technisch auch möglich sein aber ob es den Aufwand rechtfertigt? Du könntest Deine Endungen
Es lässt sich ohne weiteres ein Virus als "bla.gif" verschicken. Auch der Dateiname kommt vom Client und ist damit nicht im mindesten vertrauenswürdig.
Kann man ersatzweise immer application/octet-stream nehmen?
Ist glaub ich für ausführbare Dateien bestimmt.
"octet-stream" bedeutet "Strom von Oktetten", also viele "Achterketten", die gewöhnlich "Bytes" genannt werden. Es ist der MIME-Type für alle unspezifizierten Daten.
Bei mir wurde es aber auch schon bei TIFF-Bildern angezeigt, somit eher nicht so zuverlässig?
Der MIME-Type sagt, als was der Client die Daten ansehen soll. Wenn er application/octet-stream heißt, handelt es sich nicht um ein TIFF-Bild, sondern um eine unspezifizierte Ansammlung von Bytes.
Was macht das für den Mailempfänger für Unterschiede? Auf Grund welcher tatsache werden die Anzeigeprogramme für Attachments auf dem Client assoziiert? Mime-Type oder Dateiendung?
Also unter Windows würde ich mal sagen das der doch mehr nach der Endung geht.
s/unter Windows/bei Microsoft-Programmen/
Dass diese sich damit eklatant falsch verhalten, und dass so ziemlich jeder andere Client - derer es auch bei Mail viele gibt - es anders, nämlich richtig macht, indem er sich 'nen Dreck um irgendwelche Dateiendungen schert. Diese werden allenfalls bei einem fehlenden MIME-Type zu Rate gezogen.
Ich hab mal kurz ein jpg in .htm umbenannt und prompt ändert sich nat. 1. der Dateityp und 2. will nun auch der IE, Opera und Mozialla das Bild als Textdatei interpretieren.
Dein Filesystem versendet keinen MIME-Type. Nenn eine Grafik-Datei, die Du auf den Server legst, mal "irgendwas.exe" und lasse sie als text/plain ausliefern.
Cheatah
Hallo,
vertraue niemals etwas, das vom Client kommt. Es sollte *unbedingt* selbst geprüft werden.
Ja, das hab ich auch mal so irgendwo (hier?) gelesen :-)
Es lässt sich ohne weiteres ein Virus als "bla.gif" verschicken. Auch der Dateiname kommt vom Client und ist damit nicht im mindesten vertrauenswürdig.
Eine sogenannte "Tellermime"... ;-)
"octet-stream" bedeutet "Strom von Oktetten", also viele "Achterketten", die gewöhnlich "Bytes" genannt werden. Es ist der MIME-Type für alle unspezifizierten Daten.
Eben weil es bei mir schon u.a. bei tiff-Bildern so angezeigt wurde dachte ich mir auch sowas...
Der MIME-Type sagt, als was der Client die Daten ansehen soll. Wenn er application/octet-stream heißt, handelt es sich nicht um ein TIFF-Bild, sondern um eine unspezifizierte Ansammlung von Bytes.
Hab gerade nochmal bei SelfHtml nachgeschaut --> http://de.selfhtml.org/diverses/mimetypen.htm#uebersicht Da steht was von class, exe, bat... aber so wie es aussieht scheint es eine Art totschlag-mimetype zu seine...
...Diese werden allenfalls bei einem fehlenden MIME-Type zu Rate gezogen.
Ok...
Dein Filesystem versendet keinen MIME-Type. Nenn eine Grafik-Datei, die Du auf den Server legst, mal "irgendwas.exe" und lasse sie als text/plain ausliefern.
Ok, verstanden... :-P
Gruss AndreD
Hallo Andre,
wühl mal im Archiv danach, ich hab neulich eine ähnliche Frage gestellt und einige recht gute Hinweise bekommen, wir ich mit PHP unter ev. Rückgriff auf die Mime-Datei des Server-OS auch unbekannte Dateien recht sicher auswerten kann. Bin aber schlicht zu faul, Dir die Sucharbeit abzunehmen. ;)
Gruss, Thoralf
Hallo,
Ich bin ja auch nicht wirklich auf der Suche danach, vielleicht ist aber Dein Hinweis für den ursprünglichen Fragesteller interessant.
Gruss AndreD
Hallo AndreD
Ich bin ja auch nicht wirklich auf der Suche danach, vielleicht ist aber Dein Hinweis für den ursprünglichen Fragesteller interessant.
War eigentlich auch für Chris gedacht, aber diese Verwirrung kommt bei dem ständigen Geschrei nach namentlicher Ansprache heraus, alte Männer vertun sich. ;) War natürlich nicht bös gemeint. :)
Gruss, Thoralf
hi,
Also unter Windows würde ich mal sagen das der doch mehr nach der Endung geht. Ich hab mal kurz ein jpg in .htm umbenannt und prompt ändert sich nat. 1. der Dateityp und 2. will nun auch der IE, Opera und Mozialla das Bild als Textdatei interpretieren.
der IE macht in bezug darauf sogar noch "lustigere" sachen.
eine html-seite in .jpeg umbenannt _und_ mit dem mime-type für ein jpeg-bild ausgeliefert(!), zeigt er unter gewissen umständen trotzdem noch als html-seite an.
gibt dafür irgendwo ein beispiel im netz (hat mal irgendwer auf heise.de im forum gepostet) - dort werden über javascript oder VB jede menge neue browserfenster geöffnet, so dass dir die kiste am ende völlig abk***t. natürlich nur wenn man den IE verwendet - alle anderen browser lassen sich nicht verarschen und geben nur an, dass dieses "jpeg" kein korrektes format beinhaltet und deshalb nicht angezigt werden kann ...
gruss,
wahsaga
Hallo,
wie kann ich den Mime-Type einer Datei ermitteln
Wenn auf dem System, auf dem deine Anwendung laufen soll das file Programm vorhanden ist, dann kannst du es aufrufen und die Ausgabe verwerten. Sie hierzu auch file(1), mit den richtigen Parametern bekommst du einen Mime-Type geliefert:
file -bi [dateiname]
In Perl gäbe es für dein Problem z.B. File::MMagic, so etwas in der Art ist für PHP vielleicht auch verfügbar.
Viele Grüße,
Stefan