Уязвимость безопасности при загрузке файлов - PullRequest
0 голосов
/ 07 января 2012

Есть ли в моем коде уязвимость безопасности при загрузке файлов? Я использую Apache на моей стороне сервера. Загрузка файла включена в файле php.ini.

<?php
if ($_FILES["file"]["size"] < 100000)//maximum upload size is 100 kb
{
    if ($_FILES["file"]["error"] > 0)
    {
      echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
    else
    {
    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"]);
$var="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$samp=str_shuffle($var);
$pass=substr($samp,0,20);// creating a random text for file name.
$ext = pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION);
$ext=".{$ext}";
$newfilename="upload/".$pass.$ext;
rename("upload/".$_FILES["file"]["name"],$newfilename );
    echo "Stored in: " . $newfilename;
echo "<br>extension : ".$ext;
  }
}
}
else
  echo "File size is too large..";
?>

1 Ответ

2 голосов
/ 07 января 2012

Потенциально, да.

Что произойдет, если кто-то загрузит файл PHP?Смогут ли они определить имя файла, URL файла и запустить файл PHP?

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

Чтобы предотвратить это, вы можете хранить файлы вне пути DocumentRoot, отказаться от принятия.php-файлы или используйте .htaccess для выключения движка PHP в этом каталоге.

...