PHP скрипт загрузки файлов не работает - PullRequest
1 голос
/ 14 марта 2011

Это мой скрипт загрузки 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';
  }
?>

Может кто-нибудь увидеть проблему?

1 Ответ

3 голосов
/ 14 марта 2011

move_uploaded_file() не предназначен для использования URL в качестве пункта назначения.По сути, вы пытаетесь взять загруженный файл и загрузить его еще раз.Вы хотите использовать локальный путь к файлу без URL-адреса.

Кроме того, вы используете для проверки предоставленные данные типа и размера из массива $ _FILES.Эти поля предоставляются пользователем и могут быть изменены.Ничто не говорит о том, что злоумышленник не может загрузить файл "hackme.exe" или "subvert_my_server.php" и пометить его как загружаемый файл типа image / 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');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...