Титла: Малко помощз за upload скирпт на php 
					Публикувано от: toti84 в May 20, 2008, 12:52
					 
					Здравейте, В момента скрипта ми работи иделано, но ми трябва да го моделирам така, че когато файла се качи на сървъра, да бъде с променено име, което име да се определя от някаква променлива (примерно $ime). Ето и как изглеждат: index.html: | Примерен код  |  <html> <body>
  <form action="upload_file.php" method="post" enctype="multipart/form-data"> <label for="file">Filename:</label> <input type="file" name="file" id="file" />  <br /> <input type="submit" name="submit" value="Submit" /> </form>
  </body> </html> |  
 
  и upload_file.php:
 
 | Примерен код  |    <?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"],       "/opt/lampp/htdocs/upload/" . $_FILES["file"]["name"]);       echo "Stored in: " . "upload/" . $_FILES["file"]["name"];       }     }   } else   {   echo "Invalid file";   } ?> |  
 
  Благодаря предварително... 
					 
					 
					Титла: Малко помощз за upload скирпт на php 
					Публикувано от: VladSun в May 20, 2008, 13:30
					 
					 Използвай $ime за втори параметър на move_uploaded_file()  Кодът ти обаче е *доста* зле откъм сигурност: - не си използвал is_uploaded_file() за да провериш дали не се мести примерно "/etc/passwd" в уеб директорията    Не че ще стане, но предпочитам да те поуплаша   - проверката за типа на файла (image/gif и т.н.) се осланя на подадена от потребителя информация, която *много* лесно може да бъде променена;  - никога не използвай оригиналното име, особено когато не си го "изчистил" от специални стрингове (от сорта на .. или /)   Ако в момента използваш този скрипт, то знай, че си отворен към атаки. Един вариант е да използваш getimagesize() за да провериш дали качваният файл е изображение (макар и там да имаше начини да се качи PHP).  
					 
					 
					Титла: Малко помощз за upload скирпт на php 
					Публикувано от: toti84 в May 20, 2008, 14:09
					 
					Благодаря за бързия отговор, но се получава малка засечка: 1, Успешно се слага друго име, но не мога да се оправя с раширенята (примерно .gif) ета как го правя: | Примерен код  |   $ime=33.gif; . . move_uploaded_file($_FILES["file"]["tmp_name"],      "/opt/lampp/htdocs/upload/" . $ime]);      echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; . . |  
  на сървъра името е "33gif"
 
 
 
 | Цитат  |  | - проверката за типа на файла (image/gif и т.н.) се осланя на подадена от потребителя информация, която *много* лесно може да бъде променена;  |     Просто този файл е примерен, аз ще се опивам да качвам ".swf"
 
 
 
 | Цитат  |  - никога не използвай оригиналното име, особено когато не си го "изчистил" от специални стрингове (от сорта на .. или /)   |  
  Тук не мога да те разбера...
 
 | Цитат  |  - не си използвал is_uploaded_file() за да провериш дали не се мести примерно "/etc/passwd" в уеб директорията   Не че ще стане, но предпочитам да те поуплаша   |  
 
  Тук също не мога да те разбера... 
					 
					 
					Титла: Малко помощз за upload скирпт на php 
					Публикувано от: VladSun в May 20, 2008, 14:20
					 
					| Примерен код  |  | $ime=33.gif; |    стринговете в PHP се ограждат в кавички.
 
 | Цитат  |  | Просто този файл е примерен, аз ще се опивам да качвам ".swf" |  
  В момента мога да изпратя MIME type: image/gif, а да кача PHP файл...
  RTM: http://bg2.php.net/is_uploaded_file 
					 
					 
					Титла: Малко помощз за upload скирпт на php 
					Публикувано от: VladSun в May 20, 2008, 14:29
					 
					
					 
					 
					Титла: Малко помощз за upload скирпт на php 
					Публикувано от: toti84 в May 20, 2008, 14:56
					 
					Благодрая много последно оставям файла така: | Примерен код  |    <?php $ime='first.swf';
  if (is_uploaded_file($_FILES['file']['tmp_name'])) {    echo "faila ". $_FILES['file']['name'] ." e kachen.\n";      # readfile($_FILES['file']['tmp_name']);
 
  if ($_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("/opt/lampp/htdocs/upload/" . $_FILES["file"]["name"]))       {       echo $_FILES["file"]["name"] . " already exists. ";       }     else       {       move_uploaded_file($_FILES["file"]["tmp_name"],       #"/opt/lampp/htdocs/upload/" . $_FILES["file"]["name"]);       "/opt/lampp/htdocs/upload/" . $ime);       echo "Stored in: " . "upload/" . $_FILES["file"]["name"];       }     }   } else   {   echo "Invalid file";   }
 
  } else {    echo "Вероятен опит за пробив в сигурността при качване на файл: ";    echo "Файл '". $_FILES['file']['tmp_name'] . "'."; }
  ?> |  
  
					 
					 
					Титла: Малко помощз за upload скирпт на php 
					Публикувано от: VladSun в May 20, 2008, 15:39
					 
					Пак има пропуски - прим. XSS с името на файла. Трябва ти нещо от сорта (модифицирай го за проверка на съдържание на *.swf файлове) на: | Примерен код  |   <?php
  function image_upload($upload_dir) {         $allowed_type_extensions = array(                                         'image/jpeg'    => 'jpeg',                                          'image/pjpeg'   => 'pjpeg',                                          'image/gif'     => 'gif',                                 );      
          if (empty($_FILES) || empty($_FILES['file']))                  throw new Exception('User file not specified.', 101);         elseif (!is_uploaded_file($_FILES['file']['tmp_name']))                  throw new Exception('File is not a HTTP uploaded one.', 102);         elseif (!($img_info = getimagesize($_FILES['file']['tmp_name'])))                  throw new Exception('File is not an image.', 103);         elseif (empty($allowed_type_extensions[$img_info['mime']]))                  throw new Exception('File is not an allowed image format.', 104);         else         {                 do                         $temp_name = md5(microtime().'salt_here_$#%^$^&$#%^').'.'.$allowed_type_extensions[$img_info['mime']];                 while (file_exists($upload_dir.'/'.$temp_name));                                   if (!move_uploaded_file($_FILES['file']['tmp_name'], $upload_dir.'/'.$temp_name))                          throw new Exception('Could not move file to destination directory.', 105);                 else                         return $temp_name;         }  } ?> |  
 
 
 
 
  
					 
					 
					Титла: Малко помощз за upload скирпт на php 
					Публикувано от: toti84 в May 21, 2008, 16:16
					 
					Благодаря за отделеното време 
					
  
					
				 |