4

単純な名前変更の代わりに、なぜこの関数を使用する必要があるのか​​想像できません。

マニュアルには次のように書かれています。

move_uploaded_file

この関数は、filename で指定されたファイルが有効なアップロード ファイル (つまり、PHP の HTTP POST アップロード メカニズムを介してアップロードされたもの) であることを確認します。ファイルが有効な場合、宛先で指定されたファイル名に移動されます。

この種のチェックは、アップロードされたファイルに対して何らかの操作を行うと、その内容がユーザーや同じシステム上の他のユーザーに公開される可能性がある場合に特に重要です。

なぜこれがそれほど重要なのか、例を書いていただけますか?

4

3 に答える 3

4

この目的で通常のファイルシステム関数を使用すると、セキュリティの脆弱性が生じる可能性があるためです。プログラムでこれを行う場合:

rename($source, $destination);

攻撃者は の値を制御できるため、PHP プロセスがアクセスできる任意のファイル$sourceの名前を変更する (または移動する! --renameディレクトリ間でファイルを移動する) ことができます。

彼らが影響を与える可能性がある場合、$destinationまたはファイルが移動された後にファイルの内容にアクセスする方法がある場合、彼らはこの脆弱性を利用して、少なくともソース コードにアクセスすることができます。これにより、通常は認証資格情報が明らかになります。そして、これが起こることを想像するのは難しくありません。ユーザーのアップロードを受け入れて、URL 経由でアクセスできるようにすれば、この機能は既にアプリケーションに組み込まれています。

一般に、これは考慮しなければならないセキュリティ上の問題です。関数は、成功の穴に_uploaded_file着陸するのに役立ちます。

更新(コメントから引き出された資料):

( による) ファイル アップロードの最新の処理により、技術的$_FILESにほとんどmove_uploaded_file不要になりました。ただし、次のことを忘れないでください。

  • 技術的に不要であることは、まだ良い考えかもしれません。セキュリティについて話しているのですから、安全性をさらに高めてみませんか?
  • move_uploaded_files$_FILESは存在すらしていなかった時代に導入されregister_globals、子供向けのホラー ストーリーではなく、現実として広く使用されていました。
于 2013-04-29T11:03:13.560 に答える
-2

名前の変更機能は既存のファイルの名前を新しい名前に変更するために使用されるため、名前の変更機能は使用しないでください。一方、move_uploaded_file や copy などの関数は、実際には tmp ディレクトリから宛先ディレクトリにファイルをアップロードするために使用されます。

rename() は、フォームからアップロードされたファイルではなく、通常のファイルを移動するために使用する必要があります。その理由は、move_uploaded_file() と呼ばれる特別な関数があるためです。この関数は、ファイルを移動する前にファイルが実際にアップロードされていることを確認します。これにより、サーバーをハッキングして非公開ファイルを表示しようとする人々を阻止できます。必要に応じて、 is_uploaded_file() 関数を呼び出して、このチェックを自分で実行できます。

于 2013-04-29T10:58:04.377 に答える
-2

move_uploaded_file実際には、アップロードされたファイルを tmp ディレクトリからサーバー上の永続的な場所に移動します。はい、ファイルを指定した場所にあるサーバーに移動する必要があるため、重要ですよね?

ここのコード スニペットの例を確認してmove_uploaded_fileください: http://www.developphp.com/view_lesson.php?v=449

于 2013-04-29T10:56:18.940 に答える