ファイル接尾辞と MIME タイプ検出を使用する
通常、ファイル タイプを厳密に制限したい場合は、単純に $_FILES['myFile']['type'] を使用してファイルの MIME タイプを取得し、それが MIME タイプであるかどうかを確認します。正当なタイプ。
または、ファイル名の最後の数文字を取得してファイルの接尾辞を取得することもできますが、残念ながら、これらの方法では十分ではなく、ファイルの拡張子を簡単に変更してこの制限を回避できます。さらに、MIME タイプ情報はブラウザによって送信され、すべてではないにしても、ほとんどのブラウザはファイル拡張子に基づいて MIME タイプ情報を提供します。したがって、拡張子と同様に、MIME タイプは簡単に偽装される可能性があります。
「マジック バイト」の使用
ファイル タイプを判断する最良の方法は、「マジック バイト」として知られるファイルの最初の数バイトを調べることです。マジック バイトは基本的に、ファイル ヘッダーまたはファイルの末尾にある 2 ~ 40 バイトのさまざまな長さの署名です。ファイルの種類は何百もあり、そのうちのかなりの数のファイルには、複数のファイル署名が関連付けられています。ここでファイル署名のリストが表示されます。
怠惰な方法は、PHP 5.3.0 ではデフォルトで有効になっている fileinfo 拡張子を使用することです (公式マニュアルによると)。有効になっていない場合は、自分で有効にすることができます
たとえば、Windows の場合:
コードをコピーします コードは次のとおりです:
extension=php_fileinfo.dll
Linuxの場合:
コードをコピーします コードは次のとおりです:
extension=file info.so
#正しく動作しない場合は、以下を追加してください
#mime_magic.magicfile =/usr/share/file/magic
Windows で正しく動作しない場合:
以下を参照してください: http://www .php.net/manual/ja/fileinfo.installation.php#82570
file-5.03 -bin.zip をダウンロードして解凍すると、共有ディレクトリに magic.mgc と magic の 2 つのファイルがあります。
次に、マジック ファイルを指す MAGIC という名前のシステム環境変数を追加します。 D:softwarePHPextrasmiscmagic など
コードをコピーします コードは次のとおりです。
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 を使用できなかったので、これに頼るしかありませんでした。手動検出方法
I 一部の MP3 ファイルの不正なマジック バイトを解析するのに時間がかかりましたが、すぐに安定したアップロード スクリプトを入手しました。
この記事を終える前に、警告をしておきます。アップロードされたファイルをインクルードするために include() を決して呼び出さないようにしてください。PHP コードは画像内に巧妙に隠されている可能性が高く、画像は正常に渡される可能性があるためです。ファイル検出を通じてそのようなスクリプトが実行されると、システムに損傷を与えるだけです。
翻訳元: http://designshack.co.uk/articles/php-articles/smart-file-type-detection-using-php/
http://www.bkjia.com/PHPjc/324061.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/324061.html技術記事ファイル接尾辞と MIME タイプ検出の使用 通常、ファイル タイプを厳密に制限したい場合は、単純に $_FILES['myFile']['type'] を使用してファイルの MIME タイプを取得し、それが...