move_uploaded_file();
ftp_put();
入力タイプのファイルがあり、ユーザーが画像をアップロードできるようにします。
ユーザーの画像を別のサーバーまたはサブドメインに保存しようとしています。
そのため、誰かが悪意のあるファイルをサーバーにアップロードしても、メイン サーバーでは実行されません。
私の質問は
どのように使用できます
move_uploaded_file
かftp_put
?別のサーバーまたはサブドメインを取得する必要がありますか?
move_uploaded_file();
ftp_put();
入力タイプのファイルがあり、ユーザーが画像をアップロードできるようにします。
ユーザーの画像を別のサーバーまたはサブドメインに保存しようとしています。
そのため、誰かが悪意のあるファイルをサーバーにアップロードしても、メイン サーバーでは実行されません。
私の質問は
どのように使用できますmove_uploaded_file
かftp_put
?
別のサーバーまたはサブドメインを取得する必要がありますか?
別のサブドメインを使用しても、それをサーバーから分離することはできません。そのためには、実際に別のマシンに配置する必要があります。ただし、ファイルをサーバーに保存するだけでは、危険にさらされることはありません。問題は、何かが安全でない方法でそのファイルと対話しようとしたときに発生します。たとえば、特定の画像表示プログラムには、悪意のある画像が利用できる欠陥がある可能性があります。この場合、アップロードされた画像をこのプログラムで開くと危険にさらされます。
ファイル拡張子を確認することは、ファイルの種類を判断する正当な方法ではありません。たとえば、悪意のある実行可能ファイルを作成して、my_vacation_pic.jpeg
. しかし、繰り返しになりますが、ファイルシステムに保存するだけであれば問題ありません。
ファイルの種類を把握したい場合は、unixfile
コマンドのようなものが必要ですが、このコマンドで悪意のある可能性のあるファイルを開くことにどのようなリスクが伴うかは正直わかりません。
ただし、file
ファイルに悪意のあるものがないことを保証するものではありません。たとえば、特定の種類の実行可能プログラムであることはわかりますが、安全に実行できることはわかりません。または、それが JPEG ファイルであることはわかりますが、特定のプログラムで開いた場合に悪意のあるファイルにする方法を誰かが考え出していないことはわかりません。ファイルに悪意のあるものが含まれていないことを確認する最善の方法は、正規のウイルス対策ソフトウェアを使用することです (もちろん、その保証もありません)。
しかし実際には、セキュリティの必要性は、それをどうするかによって完全に異なります。データを保存するだけでは、それが実行されるわけではありません (OS、ファイル システム ドライバー、またはそこにファイルを配置するプログラムに特定の脆弱性がない限り)。
ファイルのアップロードは、アップロードされたコンテンツをファイルシステムに配置するだけです。その後、あるシステムから別のシステムにファイルを移動する通常の手段を使用できます。たとえば、yesを使用ftp_put
して、他のファイルと同様に、ファイルをローカル ファイルシステムからリモート FTP サーバーに転送できます。変数$_FILES["upload_key"]["tmp_name"]
は、アップロードされたファイルが保存されたファイルシステム パスを示しているためftp_put
、他のファイルと同じように直接渡すことができるはずです。
move_uploaded_file
と、ftp_put
目的が異なります。
ftp_put
FTP リソース接続が必要です。
これを行う 1 つの方法は、move_uploaded_file を使用して一時ファイルを配置する代わりに、それを ftp サーバーに直接送信することです。
このスニペットを参照してください。
<?php
// ... some code here ...
$remote_filename = 'path/to/your/uploaded/files/' . $_FILES['imagefile']['name'];
ftp_put($ftp_stream, $remote_filename, $_FILES["imagefile"]["tmp_name"]);