この目的で通常のファイルシステム関数を使用すると、セキュリティの脆弱性が生じる可能性があるためです。プログラムでこれを行う場合:
rename($source, $destination);
攻撃者は の値を制御できるため、PHP プロセスがアクセスできる任意のファイル$source
の名前を変更する (または移動する! --rename
ディレクトリ間でファイルを移動する) ことができます。
彼らが影響を与える可能性がある場合、$destination
またはファイルが移動された後にファイルの内容にアクセスする方法がある場合、彼らはこの脆弱性を利用して、少なくともソース コードにアクセスすることができます。これにより、通常は認証資格情報が明らかになります。そして、これが起こることを想像するのは難しくありません。ユーザーのアップロードを受け入れて、URL 経由でアクセスできるようにすれば、この機能は既にアプリケーションに組み込まれています。
一般に、これは考慮しなければならないセキュリティ上の問題です。関数は、成功の穴に_uploaded_file
着陸するのに役立ちます。
更新(コメントから引き出された資料):
( による) ファイル アップロードの最新の処理により、技術的$_FILES
にほとんどmove_uploaded_file
不要になりました。ただし、次のことを忘れないでください。
- 技術的に不要であることは、まだ良い考えかもしれません。セキュリティについて話しているのですから、安全性をさらに高めてみませんか?
move_uploaded_files
$_FILES
は存在すらしていなかった時代に導入されregister_globals
、子供向けのホラー ストーリーではなく、現実として広く使用されていました。