2016-04-12 13 views
0

すべてのチュートリアルでファイルアップロードフォームを読んだ後、一時ディレクトリのファイルが評価され、永続ディレクトリ...私の質問は:そのポイントは何ですか?phpアップロードされたファイルが一時ディレクトリに一時的に保存される理由

ファイルが攻撃者によってアップロードされ、実行可能であっても評価され削除される前にシステムに損害を与えることはありませんか? それ以外の場合は、ファイルが期待どおりのフォーマットでないためアップロードできないことを知るためにファイルをアップロードするまで待つ必要がありますか?

私はそれがそのためにいくつかの種類のクライアント側のコードを使用することをお勧めだと思うが、それは、クライアント側のコードを使用してファイルを評価する方が良いでしょう場合は、誰もオプション

(とそれを育てていなかったので、私は聞いていますのよ、それはどのように行われます)事前に

おかげで、すべての

+0

_automatic_ではないと判断しました。これは、例えばPHPの関数を実行することによって行うことができます: 'move_uploaded_file' – youngminz

+0

私はそれが自動であるとは言いませんでしたか? –

+0

Javascriptで拡張機能のフィルタリングをしていますか? http://stackoverflow.com/questions/4234589/validation-of-file-extension-before-uploading-file しかし、クライアント側で検証コードを追加したにもかかわらず、サーバー側でファイルを検証する必要があります。クライアント側チェックはChromeのインスペクタなどのツールで無効にすることができます – youngminz

答えて

1

まず(本当に重要):?常にサーバー側でユーザー入力を検証します。しかし、ユーザ側の入力も、クライアントサイド(ユーザビリティ上の理由から)で検証することができます。

すでに想定したように、セキュリティ上の理由からです。

「プロダクションユーザーファイルディレクトリ」に非セキュアファイル(PHPコードやその他の悪いものなど)が表示されないようにしたい場合があります。

アップロードされたユーザーファイルを正しいディレクトリに移動する前に、ビジネスルール(実行可能コード、最大ファイルサイズなど)に基づいてファイルが正常であることを確認してから移動してください。この一時的なアップロードディレクトリは、常に非公開(Webサーバーがアクセスできないことを意味する)である必要があります。

1

このようにする理由はいくつかあります。

第1に、中断されたアップロードが残っている可能性が低くなります(たとえば、ファイルのアップロード中にサーバーが電源切断された場合など)。

第2に、アップロードディレクトリ内のすべてのファイルが完全であることを保証します。アップロードディレクトリのファイルを読むときに、部分的なデータは読み込まれません。

最後に、まだ検証されていないファイル(ファイルの種類のチェックなど)を持つものとは別のファイルを保持することができます。

関連する問題