簡體   English   中英

PHP文件上傳腳本不起作用

[英]PHP file upload script not functioning

這是我的php文件上傳腳本。 它根本不起作用。 什么都沒發生。 我可能錯過了一些東西。

<?php
if ((($_FILES["thumbfile"]["type"] == "image/gif")
|| ($_FILES["thumbfile"]["type"] == "image/jpeg")
|| ($_FILES["thumbfile"]["type"] == "image/pjpeg"))
&& ($_FILES["thumbfile"]["size"] < 20000))
  {
  if ($_FILES["thumbfile"]["error"] > 0)
    {
      move_uploaded_file($_FILES["thumbfile"]["tmp_name"],
     "http://www.divethegap.com/update/z-images/admin/upload/" . $_FILES["thumbfile"]["name"]);
      $filelocation = "http://www.divethegap.com/update/z-images/admin/upload/" . $_FILES["thumbfile"]["name"];

      echo '<script type="text/javascript">
parent.document.getElementById("thumbprogress").innerHTML = "Archiving"</script>Archiving';

    }
  }
else
  {
  echo '<script type="text/javascript">
parent.document.getElementById("thumbprogress").innerHTML = "Invalid File Format"</script>Invalid File Format';
  }
?>

誰能看到問題?

奇妙

move_uploaded_file()並非旨在將URL作為目標。 本質上,您是在嘗試上傳文件,然后再次上傳。 您要使用的是本地文件路徑,其中沒有URL。

最重要的是,您正在使用$ _FILES數組中提供的“類型”和“大小”數據進行驗證。 這些字段是用戶提供的,可以被顛覆。 沒什么說惡意用戶無法上載“ hackme.exe”或“ subvert_my_server.php”並將其標記為圖像/ jpeg類型上載的,並且您的腳本會很樂意嘗試存儲在服務器上。

對於正確的處理,類似以下的方法會更好:

if ($_FILES['thumbfile']['error'] === UPLOAD_ERR_OK) {
    $info = getimagesize($_FILES['thumbfile']['tmp_name']);
    if (($info[2] !== IMG_GIF) && ($info[2] !== IMG_JPEG)) { // whoops. had || initially.
       die("not a gif/jpg");
    }
    if (filesize($_FILES['thumbfile']['tmp_name']) > 20000) {
       die("larger than 20000");
    }
    move_uploaded_file($_FILES['thumbfile']['tmp_name'], '/some/directory/on/your/server/filename.jpg');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM