2010-04-04 47 views
0

当我使用这段代码上传一个文件时,它会将该文件的一个副本放在“uploads”文件夹中(这正是我想要的),但它也将一个副本放在我的根目录中。我只希望文件进入上传文件夹。为什么我的文件上传代码会将2套文件放入我的目录中? (PHP)

define ('GW_UPLOADPATH', 'uploads/'); 
$upfile= GW_UPLOADPATH . $_FILES['userfile']['name']; 

if(is_uploaded_file($_FILES['userfile']['tmp_name'])) 
{ 
    if(!move_uploaded_file($_FILES['userfile']['tmp_name'], $upfile)) //this is saying if the file isn't moved to $upfile. 
    { 
     echo 'Problem: could not move file to destination directory'; 
     exit; 
    } 
} 
else 
{ 
    echo 'Problem: Possible file upload attack. Filename: '; //this could be an attack b/c it might be from localhost. 
    echo $_FILES['userfile']['name']; 
    exit; 
} 

echo 'File uploaded successfully<br><br>'; 
+0

此代码确实不应在上传目录之外创建文件。您的PHP上传临时路径是否设置为根目录或者其他奇怪的东西? – 2010-04-04 19:50:35

+0

你能指定文件准确放入哪个目录吗? – 2010-04-04 19:51:05

回答

2

什么是你的临时目录?上传的文件有可能以root身份登陆,但PHP无法删除它?弄明白这一点需要更多关于你的设置的知识。

+0

啊,是的,那是问题所在。我添加了@unlink($ _ FILES ['userfile'] ['tmp_name']);现在它可以工作。谢谢。 – ggfan 2010-04-04 19:55:02

+0

我会担心临时目录是根目录(任何root!)...... – 2010-04-04 19:56:19

+0

攻击者可以通过上传一个与根目录中的“真实”文件同名的文件。他可以上传'index.php',你的功能会删除你的主页! – 2010-04-04 20:19:05

相关问题