Помогите найти "дыру"

Статус
В этой теме нельзя размещать новые ответы.

wwwserfer

Постоялец
Регистрация
22 Ноя 2007
Сообщения
103
Реакции
28
да, дыру)

Ткните пожалуйста, где брешь?
Проблема в том что каким-то образом можно загрузить вместо изображения .php файлы, ну шелл вообщем... да и не только я думаю))
Полагаю что проверка не работает или работает неверно..

Загрузка изображения на сервер: изображение загружается в папку pics, его миниатюра в thumbs

PHP:
function findExtension ($filename)
{
   $filename = strtolower($filename) ;
   $exts = split("[/\\.]", $filename) ;
   $n = count($exts)-1;
   $exts = $exts[$n];
   return $exts;
}

function imagecreatefromunknown($path) {

   $ext = findExtension($path);
   
   switch ($ext) {
      case "jpg":
        $img = imagecreatefromjpeg($path);
        break;
      case "gif":
        $img = imagecreatefromgif($path);
        break;
      case "png":
        $img = imagecreatefrompng($path);
        break;
  }

  return $img;
}


if ($session == false){
$max = 5;
$total = 0;
}else{
$max = 10;
$total = 0;
}

if (isset($_POST["tags1"])) {

   for ($i=1; $i < ($max+1); $i++)
   { 
      if (trim($_FILES["image" . $i]["name"]) != "")  {
           
           $total = $total + 1;
           if ( (trim($_POST["tags" . $i]) != "") ) {
         
                $tags = htmlspecialchars(trim($_POST["tags" . $i]));
               
                $name = "image" . $i;

                if (( ($_FILES[$name]["type"] == "image/gif")
                   || ($_FILES[$name]["type"] == "image/jpeg")
                   || ($_FILES[$name]["type"] == "image/pjpeg")
                   || ($_FILES[$name]["type"] == "image/x-png")
                   || ($_FILES[$name]["type"] == "image/bmp")
                   || ($_FILES[$name]["type"] == "image/png")))
                {

                $size = ceil(intval($_FILES[$name]["size"])/1024);
                 if ($session == true)
                    $limit = (1000*$maxsizemember/10);
                 else
                    $limit = (1000*$maxsizeguest/10); 
echo "Размер Вашего изображения: ".$size." Kb<br>";
                   if ($size > $limit)
                       die ("Превышает установленный максимальный лимит - ".$limit." Kb.");


                   if ($_FILES[$name]["error"] > 0)  {
                       die("Ошибка: " . $_FILES[$name]["error"]);
                   }
                   else {
                       $n = $_FILES[$name]["name"];
                       $rndName = md5($n . date("d-m-y") . time()) . "." . findExtension($n);
                       $uploadPath = "pics/" . $rndName;
                       $tempPath = $_FILES[$name]["tmp_name"];
                       move_uploaded_file($tempPath, $uploadPath);
                   }

                }
                else
                   die("Ошибка! \"{$_FILES[$name]["name"]}\" неверный формат изображения.");


                $imagePath = $uploadPath;

                $img = imagecreatefromunknown($imagePath);
                                 
                $mainWidth = imagesx($img);
                $mainHeight = imagesy($img);
             
                if (($mainWidth > 99) && ($mainWidth < 4000) && ($mainHeight < 3200))
                {
                     
                 $a = ($mainWidth >= $mainHeight) ? $mainWidth : $mainHeight;
   
                 $div = $a / 99;
                 $thumbWidth = intval($mainWidth / $div);
                 $thumbHeight = intval($mainHeight / $div);


                 $myThumb = imagecreatetruecolor($thumbWidth, $thumbHeight);
                 imagecopyresampled($myThumb, $img, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $mainWidth, $mainHeight);
                 $thumbPath = "thumbs/" . basename($imagePath);
                 imagejpeg($myThumb, $thumbPath);
                 
                 
                 if ( ($type == "public") && !empty($_POST["wm"]) ) {
                     $imgMark = imagecreatefromgif("watermark.gif");

                     $dX = $mainWidth - imagesx($imgMark);
                     $dY = $mainHeight - imagesy($imgMark);
                     imagecopymerge($img, $imgMark, $dX, $dY, 0, 0, imagesx($imgMark), imagesy($imgMark), 40);
                 
                     $ext = findExtension($imagePath);
   
                     switch ($ext) {
                       case "jpg":
                          imagejpeg($img, $imagePath);  break;
                       case "png":
                          imagepng($img, $imagePath);   break;
                     }
                 }
   
                 $details = intval(filesize($imagePath) / 1024) . " kb (" . $mainWidth . " x " . $mainHeight . ")";
                 $id = md5($thumbPath . date("d-m-y") . time());
                 
...................................
...................................
...................................
...................................
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху