Этот скрипт загрузки файлов безопасен? - PullRequest
0 голосов
/ 29 августа 2009

Это абсолютно безопасно или нет? Я бы хотел абсолютно безопасный скрипт загрузки файлов для моего нового проекта Вот тот, который я нашел:

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?> 

Ответы [ 6 ]

3 голосов
/ 29 августа 2009

Вы не можете доверять $ _FILES ["file"] ["type"] для типов MIME. Эта информация отправляется браузером, чтобы ее можно было подделать. Лучше всего проверять типы пантомимы с помощью mime_content_type или Fileinfo .

2 голосов
/ 29 августа 2009

Следует помнить следующее: Обнаружение MIME-типов в Internet Explorer , которое может превратить ваши изображения в угрозу безопасности .

Даже если файл имеет правильное расширение и обслуживается типом пантомимы изображения, если сам файл содержит токены, такие как <html>, <body> и т. Д., IE (7 и старше) все равно может интерпретировать его как HTML , открывая возможный XSS-эксплойт.

0 голосов
/ 29 августа 2009

Это может быть слишком педантичным бредом аналитика по безопасности, но вы должны проверить все эти поля, используя, например, регулярные выражения. И содержание также. В противном случае вы просто не можете быть уверены. Можно довольно легко обмануть этот код, чтобы он воспринимал файл как «image / gif», а затем встроил в него скрипт, который конкретный обработчик Apache мог бы рассматривать как допустимую команду! (возможно, не по умолчанию, но когда вы установите «новый классный модуль Apache» в будущем ...)

Если вам нужен «полностью» безопасный сценарий: проверьте ВСЕ, чтобы убедиться, что все именно так, как вы хотите, и ничего более или менее.

0 голосов
/ 29 августа 2009

Если файлы не отсканированы, нет абсолютно 100% безопасного способа загрузки файлов. Помните, PHP - это язык сценариев, а не язык программ безопасности. Так что это так же безопасно, как вы делаете это. Тем не менее, помимо ограничения размера и типа, единственное, что вы можете сделать, это проверить странные имена файлов - странно, что вы определяете для своего приложения.

Если вы можете использовать стороннюю службу для сканирования ваших файлов (так как Yahoo сканирует атрибуты на наличие вирусов) на наличие вирусов, это сделало бы приложение лучше, но я не знаю ни о чем из головы. *

0 голосов
/ 29 августа 2009

Выглядит нормально для меня.

0 голосов
/ 29 августа 2009

Файлы с вирусами по-прежнему будут проходить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...