0

PHP経由でアップロードされたオーディオファイルのmimeタイプを検出しようとしています。.mp3.mp4と.wavを許可しています。何らかの理由で、それらのタイプの1つであっても、誤ったファイルタイプであると表示されます。これが私の検証コードです:

$allowedExts = array("wav", "mp3", "mp4", "mpeg");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "audio/wave") || ($_FILES["file"]["type"] == "audio/mp4")|| ($_FILES["file"]["type"] == "audio/mpeg"))&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
  {

  }

誰かがこれを理解した場合は、コードの一部だけでなく、コードの固定部分を送信してください。助けてくれてありがとう!

4

1 に答える 1

1

MIME タイプを確認するより良い方法は、php の内部関数にファイルを処理させることです。$_FILES["file"] の内容は、攻撃者によって部分的に簡単に偽造される可能性があります。さらに、MIME タイプの綴りの信頼できる情報源があります。

finfo http://php.net/manual/de/function.finfo-open.phpを試してください

$allowedMimeTypes = array('audio/wave', 'audio/mp4', 'audio/whatevermore');
$allowedExts = array('wav', 'mp3', 'mp4', 'mpeg');
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);

$finfo = new finfo(FILEINFO_MIME);
$mime = $finfo->file($_FILES['file']['tmp_name']);  

if(in_array($mime, $allowedMimeTypes) && filesize($_FILES['file']['tmp_name']) < 200000 && in_array($extension, $allowedExts)) {
    echo 'yeah';
}
于 2013-02-08T23:30:56.127 に答える