2010-04-04 52 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

相關問題