2011-06-23 9 views
7

[OK]をクリックして、特定の種類のファイルをフォーラム管理者の定義による方法でアップロードできるようにしました。これらのファイルが、管理者が偽のファイルではないことを確認するように設定したタイプであるかどうかを確認する方法を教えてください。私は現在、MIMEタイプのアプローチを使用していますが、ブラウザによって異なるMIMEタイプを設定できるため、これはあまり効果がありません。ファイルの拡張子を確認することは役に立ちません。なぜなら、人々は許可されている拡張子を与えることでこれを回避することができますが、ファイルの種類は違うからです。特定のファイルを確実にアップロードする方法

おそらく、さまざまなタイプのファイル内のバイトをチェックして、正しいタイプのものであることを確認する方法があるかもしれません。おそらくこれも偽造される可能性がありますが、フォームを使用してファイルをアップロードして送信すると、ちょっとだけ正確になります。

誰かがこれに関するアイデアを手伝ってもらえますか?

感謝:)

+0

どのような種類のファイルが必要ですか?ファイルに応じて、ヘッダーを読み込んで、そのファイルの種類を確認することができます。 – alex

+0

管理者は、許可されているファイルの拡張子をコンマで区切って指定することで、アップロードを許可するファイルを選択します。ですから、今では 'explode( '、'、$ extensions)'を行うだけで、その配列内のすべての拡張子が正しいかどうかを確認する必要があります。これを行う方法はありますか?どのファイルをヘッダーで読むことができますか?そして、どのファイルをヘッダーで読むことができないのですか?これを実装するためのよりよい方法については、セキュリティやコードワーキの方が良いでしょうか? – SoLoGHoST

+0

['mime_content_type()'](http://php.net/manual/en/function.mime-content-type.php)を見てください。 – alex

答えて

3

PECL fileinfo(またはビルトイン> 5.3)、それは、人々が簡単にファイルの拡張子を変更することから保護して、そのMIMEタイプを推測するために、ファイルのバイト署名を検査します。場合によっては、ファイルタイプの適切なバイトシグネチャと一致するファイルに悪質なバイトを含めることも可能です。 PHPのドキュメントから

:Unixサーバ上で

// Procedural style 
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension 
echo finfo_file($finfo, $filename); 
finfo_close($finfo); 

// OO style 
$finfo = new finfo(FILEINFO_MIME_TYPE); 
echo $finfo->file($filename); 
$finfo->close(); 

、私はfinfo_file()はGNU fileユーティリティと同じバイトのシグネチャデータベースを調べ信じています。

+0

@Phoenix今週私がPHPのdoc URLの1つからi10nを削除したのは今週です。私は今から自分でそれをすることを忘れないでください:) –

+0

マイケルありがとう、それを試してみましょう。 – SoLoGHoST

0

ユーザー入力を信頼しないでください。特定のファイルタイプ/ MIMEタイプをチェックすることは、悪意のあるコンテンツをあなたのサーバにアップロードしないようにする方法として使用しないでください。目標がサーバーセキュリティである場合、ユーザーがアップロードしたコンテンツはサーバー上で実行されないようにするだけです。他の人がダウンロードするファイルについては、そのコンテンツがユーザーによって生成されたものであり、ウイルスに感染していないことを保証するものではないという免責事項を必ず記入してください。

関連する問題