move_uploaded_file();
ftp_put();
我有一个输入类型文件,让用户上传图片。
我尝试将用户的图像保存到不同的服务器或子域。
因此,如果有人将恶意文件上传到服务器,它将无法在我的主服务器上执行。
我的问题是
如何将{strong> move_uploaded_file
与ftp_put
一起使用?
我应该获得另一台服务器或子域名吗?
答案 0 :(得分:2)
使用不同的子域不会将其与服务器隔离:为此,您需要将其实际放在不同的计算机上。但是,仅将文件保存到服务器并不会使您处于危险之中。当某些东西试图以不安全的方式与该文件交互时,问题就出现了。因此,例如,特定图像查看程序可能具有恶意图像可以利用的缺陷。在这种情况下,使用此程序打开上传的图像会使您面临风险。
检查文件扩展名不是确定文件类型的合法方法。例如,我可以写一个恶意的可执行文件并将其命名为my_vacation_pic.jpeg
。但是再一次,只要将它保存在文件系统上就不会有问题。
如果你想弄清楚文件类型,你需要类似unix file
命令的东西,虽然我真的不确定使用这个命令打开可能的恶意文件会涉及哪种风险。< / p>
但是,file
并不保证文件中没有任何恶意内容。例如,它可能会告诉您它是某种可执行程序,但它无法告诉您运行安全。或者它可以告诉你它是一个JPEG文件,但它无法告诉你,如果在某个特定程序中打开,某人还没有找到使其成为恶意的方法。确保文件中没有任何恶意内容的最佳方法是使用真正的防病毒软件(当然,也没有任何保证)。
但实际上,对安全性的需求完全取决于您打算如何处理它。仅存储数据并不意味着它将以任何方式执行(除非您的操作系统,文件系统驱动程序或将文件放在那里的程序存在特定漏洞)。
文件上传只是将上传的内容放在您的文件系统上:然后您可以使用任何常规方法将文件从一个系统移动到另一个系统。例如, 是 ,您可以使用ftp_put
将文件从本地文件系统传输到远程FTP服务器,就像使用任何其他文件一样。变量$_FILES["upload_key"]["tmp_name"]
告诉您存储上传文件的文件系统路径,因此您应该能够像其他任何文件一样直接将其传递给ftp_put
。
答案 1 :(得分:1)
move_uploaded_file
和ftp_put
用于不同目的。
ftp_put
需要FTP资源连接。
一种方法是使用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"]);
答案 2 :(得分:0)
作为一般规则,当你允许人们上传文件时,你会测试你想要的图像文件,JPEG,PNG等文件类型,据我所知,它不包含恶意软件,除非它有一些可怕的画面。
像
这样的东西if($_FILES["imagefile"]["size"] >= 2120000) {
echo "F2";
die();
} else {
$imageData = @getimagesize($_FILES["imagefile"]["tmp_name"]);
if($imageData === FALSE || !($imageData[2] == IMAGETYPE_GIF || $imageData[2] == IMAGETYPE_JPEG || $imageData[2] == IMAGETYPE_PNG)) {
echo "F2";
die();
}
}
这不是完整的代码,而是测试图像类型和大小的示例。 我不确定ftp_put,但file_upload首先将它放在服务器上的tmp文件夹中,然后将其复制到你的指定位置。