3

PHPを使用してサーバーのファイルタイプを検証したい。現時点では、ファイルのファイル拡張子の種類を確認して検証しました。これは問題なく機能しますが、問題は、ユーザーがテキスト ファイルを jpeg に変更してもアップロードできるため、ファイルを検証する最良の方法ではないことです。

私がやりたいことは、別の検証方法を追加することです.phpを使用してファイルのMIMEタイプをチェックし、ファイルが画像、ビデオ、またはオーディオかどうかを認識したいと考えています。

私の質問は、php で MIME タイプを使用してファイルを検証できるように、どのようにコーディングされているのでしょうか。また、非常に大きなファイルがある場合、MIME 検証が開始されるまでに長い時間がかかりますか?それともすぐに検証されますか?

以下は現在、PHPコードを使用してファイルタイプをチェックする画像のみのコードです。

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    }
  }
else
  {
  echo "Invalid file";
  }
?> 
4

2 に答える 2

3

finfo通常、MIME タイプのルックアップは非常に高速で、PHP では拡張機能を使用して実行できます。例:

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, '/path/to/file.jpg'); // image/jpeg
finfo_close($finfo);

typeまた、スーパーグローバルのインデックスに依存しないでください。$_FILESその値は、攻撃者が望むものに偽装される可能性があります。もちろん、ファイル拡張子についても同じことが言えます。

于 2012-05-18T13:14:25.530 に答える
0

getID3()を使用できます。また、getimagesizeで安心できます。

ここでは JavaScript コードは関係ないようです。また、おそらくご存知のように、 で示されているタイプは$_FILES、ユーザー/ブラウザーからの提案としてのみ表示する必要があります。

于 2012-05-18T13:18:29.107 に答える