2011-07-28 18 views
2

私はPHPを使用して制限付きのファイルアップロードをしようとしています。PHPを使用してファイルのアップロードを制限する方法は?

私は、ファイルが動作しない(すなわち、マイクロソフトのVisual FoxProテーブルタイプ)の.dbf私にとって

if (($_FILES["file"]["type"] == "application/dbase") 
||($_FILES["file"]["type"] == "application/dbf") 
||($_FILES["file"]["type"] == "application/x-dbase") 
||($_FILES["file"]["type"] == "application/x-dbf") 
||($_FILES["file"]["type"] == "zz-application/zz-winassoc-dbf")) 

を使用していました。 .dbfのコンテンツタイプに入れるべきことを私に提案してください。

+2

をファイルの簡単なブロブのアップロードおよびダウンロードを探す私が類似し、未回答の質問です。 http://stackoverflow.com/questions/6845866/mimes-octet-stream-and-uploadify – daGrevis

+0

あなたは 'print_r($ _ FILES [" file "] [" type "]);'を試しましたか? –

答えて

-2

そのタイプのファイルをアップロードするときに渡されるMIMEタイプを調べてみてください。あなたのコードのどこかに一時的なprint $_FILES["file"]["type"];を挿入し、ファイルをアップロードしてコードを実行し、それが何を印刷するかを見てください!その型をコピーしてif文で使用できます。

+0

そして、タイプが "application-octet-stream"の場合、ブラウザが実際のファイルタイプを認識しない場合のデフォルト値はどうなりますか?タイプフィールドが故意に偽装されている場合はどうなりますか? – GordonM

+0

それから私はアップロードを検証するためにファイルタイプをいくつかのチェックのうちの1つとして使うことを提出します。 – AndyBursh

+0

ポイントは何ですか?それは完全に信頼できません。 – GordonM

1

コンテンツタイプの定義は、ブラウザ(または他のクライアントアプリケーション)によって異なります。は、に依存することはできません。私の推測では、あなたのブラウザは.dbfファイルを認識せず、デフォルトは "application/octet-stream"です。

1

ファイルアップロードのタイプフィールドに依存して実際にそのタイプを判別することはできません。まず、クライアントによって偽装される可能性があります。第2に、クライアントはファイルタイプが実際に何であるかを知らず、単に代わりに 'application/octet-stream'と報告するだけかもしれません。

自分でアップロードしたファイルの種類を判断する必要があります。幸いにも、PHPはfileinfo拡張子を提供しています。この拡張子は、ファイルのタイプの決定に役立ちます。

php.netから1に基づいて

コード例:

<?php 
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension 
echo finfo_file($finfo, $_FILES["file"]["tmp_name"]) . "\n"; 
finfo_close($finfo); 
?> 

http://www.php.net/manual/en/ref.fileinfo.php

2

ファイルをアップロードし、ブラウザは、おそらくそれは、アプリケーション/ DBF MIME-時間だし、としてそれを送り知りません一般的な "アプリケーション/オクテットストリーム"。クライアント/ブラウザは、アップロード時に知るようにMIMEタイプを設定する必要があります。これは、ユーザーが変更することができます!

したがって、MIMEタイプは信頼できません。正しいファイル形式/形式であることを確認するには、アップロードしたファイルを調べる必要があります。

2

この問題の別の簡単な方法は、MIMEタイプを調べる代わりに、 この機能を使用して、アップロードされたファイルのファイル拡張子を取得できます。

$filename=$_FILES["file"]["tmp_name"]; 
$ext = pathinfo($filename, PATHINFO_EXTENSION); 
$ext = strtolower($ext); 

if($ext=="png"||$ext=="gif"||$ext=="jpg"||$ext=="jpeg"||$ext=="pdf" 
     ||$ext=="doc"||$ext=="docx"||$ext=="xls" 
     ||$ext=="xlsx"||$ext=="xlsm"||$ext=="dbf") 
    { 
     // your code whatever you want to write; 

    } 

ここで、ここでBlob-upload

+0

良い!私のために働く – Nishank

関連する問題