ホームページ  >  記事  >  php教程  >  PHP を使用したインテリジェントなファイル タイプ検出の実装コード

PHP を使用したインテリジェントなファイル タイプ検出の実装コード

WBOY
WBOYオリジナル
2016-06-13 12:06:39818ブラウズ

ファイル接尾辞と MIME タイプ検出を使用する
通常、ファイル タイプを厳密に制限したい場合は、単純に $_FILES['myFile']['type'] を使用してファイルの MIME タイプを取得できます。ファイルを調べて、それが正当なタイプであるかどうかを検出します。
あるいは、ファイル名の最後の数文字を取得してファイル接尾辞を取得することもできますが、残念ながら、これらの方法では十分ではなく、ファイルの拡張子を簡単に変更してこの制限を回避できます。さらに、MIME タイプ情報はブラウザによって送信され、すべてではないにしても、ほとんどのブラウザはファイル拡張子に基づいて MIME タイプ情報を提供します。したがって、拡張子と同様に、MIME タイプは簡単に偽装される可能性があります。
「マジック バイト」の使用
ファイルの種類を判断する最良の方法は、「マジック バイト」として知られるファイルの最初の数バイトを調べることです。マジック バイトは基本的に、ファイル ヘッダーまたはファイルの末尾にある 2 ~ 40 バイトのさまざまな長さの署名です。ファイルの種類は何百もあり、そのうちのかなりの数のファイルには、複数のファイル署名が関連付けられています。ここでファイル署名のリストが表示されます。
怠惰な方法は、PHP 5.3.0 ではデフォルトで有効になっている fileinfo 拡張子を使用することです (公式マニュアルによる)。有効になっていない場合は、自分で有効にすることができます。
たとえば、Windows の場合。 :

コードをコピーします コードは次のとおりです:


extension=php_fileinfo.dll



Linux の場合:

コードをコピーします コードは次のとおりです:


extension=fileinfo.so
#正しく動作しない場合は、次の行を追加してください。
#mime_magic .magicfile=/usr/share/file/magic



Windows で正しく動作しない場合:
以下を参照してください: http://www.php.net/manual/en/ fileinfo.installation.php#82570
file-5.03-bin.zip をダウンロードして解凍します。magic.mgc と 2 つのファイルがあります。共有ディレクトリのマジック。
次に、マジック ファイルを指す MAGIC という名前のシステム環境変数を追加します。 D:softwarePHPextrasmiscmagic など

コードをコピー コードは次のとおりです。

function getFileMimeType($file) {
$buffer = file_get_contents ($file);
$finfo = new finfo(FILEINFO_MIME_TYPE);
return $finfo->buffer($buffer);
$mime_type = getFileMimeType($file); 🎜 >switch($mime_type) {
case "image/jpeg":
// ここにアクションが入ります...
}



画像のアップロードを処理します


画像のアップロードのみを許可する場合は、組み込みの getimagesize() 関数を使用して、ユーザーが実際に有効な画像ファイルをアップロードしていることを確認できます。ファイルが有効な画像ファイルでない場合、この関数は false を返します。

コードをコピー

コードは次のとおりです: // ファイル入力フィールドの name 属性が myfile $tempFile = $ _FILES['myFile']['tmp_name']; // アップロード中に PHP によって作成された一時ファイルのパス

$imginfo_array = getimagesize($tempFile) // そうでない場合は false を返します。有効な画像ファイル

if ($imginfo_array !== false) {
$mime_type = $imginfo_array['mime'];
switch($mime_type) {
case "image/jpeg":
// あなたのアクションはここにあります...
}
}
else {
echo "これは有効な画像ファイルではありません"
}



「マジック バイト」のフェッチと解釈を手動で読み取る

何らかの理由で FileInfo 拡張子をインストールできない場合でも、ファイルの最初の数バイトを読み取って手動で判断することができます。既知のファイルとの比較 特定のファイル タイプに関連付けられたバイトの魔法は、ファイル タイプです。正規のファイル形式にいくつかの不正なマジック バイトが関連付けられている可能性もあるため、このプロセスには多少の試行錯誤が必要だったはずです。
しかし、これは不可能ではありません。数年前、実際の mp3 ファイルのみをアップロードできるスクリプト ファイルを作成するように依頼されました。当時は Fileinfo を使用できなかったので、それに頼るしかありませんでした。この手動検出方法について 一部の mp3 ファイルの不正なマジック バイトを解析するのに時間がかかりましたが、すぐに安定したアップロード スクリプトを入手できました。 この記事を終える前に、警告しておきます。アップロードされたファイルを含めるために include() を決して呼び出さないようにしてください。PHP コードが画像内に巧妙に隠されている可能性があり、画像もファイル検出により、このようなスクリプトが実行されると、システムに損傷を与えるだけです。
翻訳元: http://designshack.co.uk/articles/php-articles/smart-file-type-detection-using-php/
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。