2011-06-17 13 views
5

希望するファイルをサーバーにアップロードできますが、ファイル拡張子は「.jpg」である必要があります。サーバーに害を及ぼす可能性のあるものをアップロードすることはできますか?アップロードされたファイルが実際のイメージファイルであることを確認することは重要ですか?

私の質問のポイントは、ファイルの種類の確認が遅いということです。ファイルの拡張子が十分に安全であるかどうかを確認するだけで済みます。私はイメージとして偽装されたマルウェアが使用されるシナリオを想像するのが難しいです。

私は画像を確認するために、getimagesize()を使用するための推奨を見てきましたが、この機能はかなり遅いです、そして、それはマルウェアのアップロードを防止するため、必要に応じて、あるいは効果的である場合、私は...把握することはできません

これに関する情報は非常に高く評価されています。

+0

MIMEタイプを確認しても機能しませんか? jpg拡張子を使っても危険ではないのに(と私はそれも確信していません) – Julien

+4

私はファイルタイプチェックの遅さに匹敵するとは思っていませんhttpアップロードプロセス自体。 – mario

+0

機能の速度は重要ではありません。なぜなら、アップロード後に直接実行するので、ユーザは瞬間的になるとは予想しません。私はちょうどhttp://www.php.net/manual/en/book.fileinfo.phpを使用して、それを行うと言うだろうとあなたは心配する必要はありません。 – castis

答えて

3

ですよくファイル内の少なくともいくつかのバイトを検査します。それはかなり速いです、私は毎日それを高速で実行する必要がありますアプリで何百ものファイルのためにそれを使用します。

ただし、わからないことはわかりません。おそらく最初に拡張子をチェックし、安全なファイル名と安全なストアを確保し、クライアントに適切に送信するようにします。

イメージライブラリを手で触れる前に(セキュリティ上の理由から、サイトのユーザーのコンピュータ上にあるものを含む)、ファイルをウイルススキャナでスキャンする必要があります。それはgetimagesize()と比較してはるかに遅いですが、ペイロードとしてのアップロードを防ぐために、<?phpの発生についてもファイルを調べることをお勧めします。当然、これには、PHPインストールのセキュリティ設定(例えば、suhosinによる)によって包含が妨げられない場合、pharファイルのチェックが含まれます。

オンデマンドウイルススキャンの次に、保存されたファイルは、未知の悪用。

この部分は常にバックグラウンドジョブです。しかし、オンデマンドリアルタイムチェックでも、アプリケーションが常にアップロードしない限り、しばしばそれほど時間がかかりません。いくつかのアップロード待ち行列を導入して、アップロードがすでに完了しているが、必要なタスクが実行された後にアップローダがファイルを利用できるようにすることができます。

4

イメージのセキュリティをテストするには、実際にはGDなどのイメージ処理ライブラリを使用してイメージを再作成し、新しいイメージを使用します。

これは、ライブラリのバージョンを更新した場合、ファイルを完全に安全にするはずです。

あなたのものは少し遅くなるかもしれませんが、より安全な方が良いでしょう。

ファイル名の末尾に「.jpg」があるかどうかを確認するだけで何も起こりません。このファイルは、どんな種類のファイルでも構いません。

これが役に立った!

+2

逆に、古いバージョンのライブラリを使用している場合、悪用があればあなたは嫌われます。 –

+0

True!個人的には、私はGDのコーディングを鉱山で作った人に頼りたいので、イメージ処理ライブラリの古いバージョンでさえ望ましいでしょう。 –

+0

イメージサイズのヘッダー内に巨大なサイズを持つが、サイズが小さい偽のイメージを送信すると、すべてのライブラリが失敗します。アップロード要求を一括して送信すると、サーバー上のリソースが消費されます。 – hakre

4

拡張機能をチェックするのは安全ではないようです。サーバーに有害ですか?サーバーOS、アップロードされたファイルのアクセス許可などを知らないと言うのは難しいです。これらの実行を許可したくないのは間違いありません。 これは確かに、ユーザーが非画像をアップロードできるようにすることで虐待され、友だちがダウンロードしたときに本当に何に名前を変更するだけです。 )あなたがfileinfo libraryなどを試すことができます。これは、あなたが(私たちが知っているように、すべてのアップロードが超高速で実行されているため)getimagesize()は少し遅すぎると思うなら..あなた自身が無意識のうちに海賊版映画、海賊版などを主催見つける方法

+0

面白い展望。これありがとう。 – dqhendricks

+0

私はそれが一番重要なポイントだと思います。それは古いトリックです。別の方法は、ファイルヘッダーを偽ったり、元のファイルに追加したりすることです。 – hakre

0

イメージであるかどうかをチェックしない別の副作用は、ウェブサイトのどこかに(ユーザープロファイル、フロントページなどに)表示する必要がある場合です。実際にイメージではない場合、それは壊れて表示され、したがって、あなたのサイトは壊れて表示されます。

マルウェアが注入されているかどうかは、サーバーの構成によって異なります。穴を塞いで悪用するように更新されていない場合は、マルウェアが侵入する可能性があります(それはまれですが、可能です)。

関連する問題