2011-01-26 13 views
4

PHPのアップロードで、アプリケーションの有効なMIMEタイプのセットと一致するように、アップロードされるファイルのMIMEタイプを検証しようとしています。 fileinfo()を使用してOffice 2007ファイルのMIMEタイプを判別しようとすると、適切なMIMEタイプとして検出されません。代わりに、MIMEタイプの応答は、 "アプリケーション/ジップ"PHP 5.3.5 fileinfo()MS Office 2007ファイルのMIMEタイプ - magic.mimeの更新?

ある

OfficeドキュメントのMIMEタイプ: http://filext.com/faq/office_mime_types.php

例PHPコード:

$ oFileInfo =新たFInfo(FILEINFO_MIME_TYPE)。

$ sMimeType = $ oFileInfo - >ファイル($ _FILES ['Filedata'] ['tmp_name']);

echo $ sMimeType;

Serverのセットアップ情報:

  • OS:Windows Server 2003 32ビット
  • Webサーバ:5.3.5(スレッドセーフ)のFastCGI 1.5
  • を使用して:6.0
  • PHPをIIS
  • ファイル:magic.mime
    • darko at uvcmsドットコム16-Apr-2008 09:35
      • リンク:php.net/manual/en/fileinfo.installation.php
    • サイズ:517キロバイト
    • 出典:ソースフォージ:GNU32 - ファイルタイプgnuwin32.sourceforge.net/packages/filetype。 HTM

私は、ウェブサーバからダウンロードするときに、新しいOfficeの形式の問題を参照して、多くの記事を見つけました。これらの例では、新しいMIMEタイプを既存のmagic.mimeファイルに追加するか、既にMicrosoft Office 2007+ MIMEタイプを含んでいるmagic.mimeファイルへのリンクを追加する方法がわかりません。ご協力いただきありがとうございます。

答えて

0
  1. はい、magic.mimeを更新する必要があります。あなたはマニュアルは、それが非推奨と述べ機能を使用しているのはなぜブラウザ($_FILES['Filedata']['type']
  2. から送信されたMIMEタイプを信じていないため
  3. 親指アップ? http://php.net/manual/en/function.mime-content-type.php

注:finfo()それは魔法のバイトだことにより、ファイルのMIMEタイプを決定します。 Office 2007ファイル(およびePUBなどの他の多くのファイル形式)が指定されたディレクトリ構造を持つ単純なzipパッケージであるため、を返すのはfinfo()にするのが妥当です。

私は解凍を提案するか、あなたは本当にそれの内容に基づいてファイルタイプを確定したい場合は、それは構造体の検査する内容を一覧表示します

+0

「new finfo(FILEINFO_MIME_TYPE);」を使用すると、現在の(非推奨のマナー)の権利ですか? mime_content_type()関数は、私が理解しているものから実際には非難されているものです。 – Arachnid

+0

右、私は混乱しています、ごめんなさい。 – timdream

+0

質問はもちろん、どのようにmagic.mimeファイルを更新するのですか、それについての手がかりは? – Jorre

0

を追加しようとしたている(アップロードするときといないMIMEタイプブラウザは報告します)新しいMIMEタイプはIISに?

  1. 右の「Webサイト」をクリックし、「プロパティ」を選択し、インターネットの管理スナップイン
  2. に取得を選択し、「HTTPヘッダー」
  3. 新を入力し、「MIMEタイプ」
  4. を選択先頭にピリオドと適切なMIMEタイプがない拡張子。それぞれの内線番号について必要に応じて繰り返します。 「OK」
  5. をクリックして
+0

申し訳ありませんTwisterですが、問題はWebサーバーではありません。この問題は、アップロードされている実際のファイルのMIMEが有効であることを検証しています。 – Arachnid

+0

はい、phpがWebサーバーのmimeテーブルを使用してファイルのMIMEタイプを識別している可能性があります。 – Twister

+1

PHP Fileinfo finfo()が、使用するセットアップであるmagic.mimeファイル以外のものを使用していると、私はかなり驚いています。ただし、.docxおよび.xlsx MIMEタイプを使用してIISにMIMEタイプを追加してテストした場合、状況は変わりません。 – Arachnid

1

新しいOfficeファイルが実際にあるZIPアーカイブすべてのダイアログを閉じます。そのため、MIME Magicデータベースでは、ZIPファイルとして検出されます。ファイル拡張子に基づいて特別なルールを追加するか、またはZIPファイルを調べてdocPropsフォルダ(Office ZIPアーカイブにはドキュメントに関するメタデータを含むフォルダがある)があるかどうかを確認する必要があります。

実際には異なる拡張子を持つZIPアーカイブである他のファイル形式があります。 JARファイル。

+0

jmz、はい私はそれらがZIPアーカイブであることを認識しています。しかし、MIMEタイプは、Office 2007以上のファイルではfilext.com/faq/office_mime_types.phpにあります。私はこれらを検出できる更新されたmagic.mimeファイルが必要だと確信しています。更新されたmagic.mimeが見つからない場合は、実際のmagic.mime行を既存のmagic.mimeファイルに追加して、さまざまなOffice 2007+拡張機能用に追加することができます。 – Arachnid

+0

magic.mimeファイルの構文と方法論は、誰も解決策の考え方を持っていないようだから知られていません。私は、人々があなたのmagic.mimeファイルを壊すことを恐れて混乱しないと言う数多くの投稿を見つけました。悲しいことに、彼らの誰もファイルの仕組みを知る場所を指摘していませんでした。 – Arachnid

+1

あなたはいつでもマニュアルページを見ることができます:) http://linux.die.net/man/5/magic – jmz

1
  1. はい、magic.mimeを更新する必要があります。

笑、ただそれを更新して、問題を解決しました。 残念ながら、それは魔法のMIMEタイプのシステムのように見え、実際のファイルの内容を見ているのオフ動作し、ファイルが圧縮されているので、それは解凍することはできません(と、どのファイルを見て?)

誰かが関数を書く提案しました圧縮されたファイルを解凍して、例えば "DocProps"ディレクトリが存在するかどうかを確認します。しかし、これにより、プロダクションサーバーに別の攻撃のベクトルが導入されます。

+0

ここで私はMicrosoftがセキュリティを改善するために物事を整理していると思いました。 :-) – Arachnid

関連する問題