8

私は、MP3ファイルのみを許可する必要があるPHPのアップロードフォームに取り組んでいます。

アップロードが完了したら、ファイルを分析して、それが本当にMP3であるかどうかを確認します。最初のステップは、mimeタイプをとして検出することaudio/mpegです。私はライブラリを使用しfinfo_file()、テスト中に一部のMP3ファイルがMIMEタイプの結果として拒否されることを除いて正常に動作しますapplication/octet-stream

私の質問は次のとおりです。

  • 私のアプリはそれらのMP3ファイルを確実に拒否する必要がありますか?彼らは実際にオーディオを再生します。
  • このMIMEタイプがMP3である理由はありますか?
  • MIMEタイプの検出は、ファイルの種類を知るための最も確実な方法ですか?
4

3 に答える 3

3

アップロードが必要なほとんどのアプリケーションでは、事前定義されたMIMEタイプのリストに対して、ブラウザー(クライアント)から渡されたMIMEを検証することを決定することがあります。このアプローチは、ブラウザがアップロードされているファイルのMIMEタイプを通信できないという疑わしいことが起こっている場合、現時点ではわざわざ処理したくないと一般的に想定しています。

<?php

$valid_mp3_mimes = array(
    'audio/mpeg',
    'audio/x-mpeg',
    'audio/mp3',
    'audio/x-mp3',
    'audio/mpeg3',
    'audio/x-mpeg3',
    'audio/x-mpeg-3',
    'audio/mpg',
    'audio/x-mpg',
    'audio/x-mpegaudio',
    'video/mpeg',
    'video/x-mpeg',
);

$uploaded_file_mime = $_FILES['upload_field_name']['type'];

if(!in_array($uploaded_file_mime, $valid_mp3_mimes))
{
    die('Upload is not a valid MP3 file.');
}

あなたはこれがあなたの目的にとって十分な方法であると感じるかもしれないし、そうでないかもしれません。PHPマニュアルには、ブラウザがこの情報を提供した場合にこの情報が利用可能であり、サーバー側でMIMEタイプがチェックされていないため、当然のことと見なされるべきではないと明示的に記載されています。

考慮すべきことの1つは、ファイルの真のMIMEタイプを認証できるようにするサーバー上のリソースの可用性です。

PHP開発者として、私たちはほとんどの部分でプラットフォームに依存しないコードを作成する柔軟性が大好きです(たとえば、XAMPPを実行するWindowsシステム上に構築されたWebアプリケーションは、ほとんど変更を加えることなくLinuxホスティング環境にデプロイできます)。ただし、MIMEタイプを検証する場合、これらのツール("file"や"finfo_file"など)の存在を確認する必要があるプラットフォーム依存のメソッドの導入を開始します。

これは、これらのツールを利用し、PHPの範囲内で取得するのとほぼ同じくらい徹底的な実例である、調査する価値のある1つの実装(CodeIgniter GitHubリポジトリから取得)である可能性があります。

ファイルMIMEタイプは、可能であれば、アップロードされたファイルの(実際の)MIMEタイプを検出します。 https://github.com/EllisLab/CodeIgniter/blob/develop/system/libraries/Upload.php#L983


ソース

PHPの手動POSTメソッドのアップロード-http ://www.php.net/manual/en/features.file-upload.post-method.php

ウェブマスターツールキットのMIMEタイプ-http ://www.webmaster-toolkit.com/mime-types.shtml

FILExt.MP3ファイル-http ://filext.com/file-extension/MP3

于 2012-04-15T02:30:49.910 に答える
0

クライアントが正しい MIME タイプを提供することを信頼するだけでなく、ファイル タイプを検出する非常に堅牢な方法が必要な場合は、 UNIX でファイルユーティリティを使用します。

$ file Black\ Sands\ 01\ Prelude.mp3
Black Sands 01 Prelude.mp3: Audio file with ID3 version 2.2.0, contains: MPEG ADTS, layer III, v1, 320 kbps, 44.1 kHz, Stereo

$ file homework/math475-hw8.docx
homework/math475-hw8.docx: Microsoft Word 2007+

PHP では、exec関数を使用して呼び出すことができます。

于 2012-04-08T04:49:30.463 に答える
0

ファイル検出の最良の方法は、MIME に加えて「マジック バイト」または「マジック ナンバー」スキームを使用することです。Unix file(およびfinfo_file) は、実際には「マジック バイト」を使用してこのファイル検出を行います。要するに、はい。

ファイルがどのように見えるかについてあまり心配する必要はありません。再生される限り、ファイルは問題ないはずです。

本当にもっとや​​りたい場合は、自分でマジック バイトを確認できます。ここにそれらのリストがあります。

于 2012-04-08T05:08:56.590 に答える