Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Безопасна ли такая загрузка изображений на сервер
 
 автор: Ванек2010   (29.06.2012 в 11:13)   письмо автору
 
 

Взял готовую функцию загрузки, убрал move_upload, т.к. прочел, что временный файл не должен перемещаться, его необходимо удалять, а на основе его создавать новое изображение, так безопаснее. Может я что-то упустил, просьба проверить.

<?php

/**   
 * Function of uploaded of a file    
 * Функция загрузки файла (аплоадер)   
 * @param  int    $max_file_size    максимальный размер файла в килобайтах   
 * @param  array  $valid_extensions массив допустимых расширений   
 * @param  string $upload_dir       директория загрузки   
 * @return array                    сообщение о ходе выполнения   
 *   
 * @author IT studio IRBIS-team (www.irbis-team.com)   
 * @copyright © 2009 IRBIS-team    
 */   
    
function uploadHandle($max_file_size = 100, $valid_extensions = array(), $upload_dir = '.')   
    {   
       
        
$error = NULL;   
        
$info  = NULL;   
        
$max_file_size *= 1024;   

        if (
$_FILES['userfile']['error'] === UPLOAD_ERR_OK)   
        {   
            
# проверяем расширение файла   
            
$file_extension = strtolower(pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION));   
            if (
in_array($file_extension, $valid_extensions))   
            {   
                
# проверяем размер файла   
                
if ($_FILES['userfile']['size'] <= $max_file_size)   
                {   
                    
                    
# проверяем, действительно ли загруженный файл является изображением     
                    
$imageinfo  = getimagesize($_FILES["userfile"]["tmp_name"]);
                    list(
$width, $height, $type, $attr) = $imageinfo;

                      if (
$imageinfo["mime"] == "image/gif" or $imageinfo["mime"] == "image/jpeg" or $imageinfo["mime"] == "image/png")
                    {                        
                        
# проверяем ширину и высоту баннера
                        
if ($width == 468 and $height == 60)
                        {
                            
# Создаем пустое изображение 468x60
                            
$image = imagecreatetruecolor($width, $height); 
                            
                            
# Имя будущего баннера
                            
$new_name = 'test';
                            
                            
# В зависимости от типа создаем новое изображение на основе переданного
                            
switch ($type) 
                            {
                                  case 
1: 
                                    
$nimage = imagecreatefromgif($_FILES["userfile"]["tmp_name"]); 
                                    
imagecopyresampled($image, $nimage, 0, 0, 0, 0, $width, $height, $width, $height);
                                    
$create_img = imagegif($image, $upload_dir.'/'.$new_name.'.gif', 100);
                                    break;
                                  
                                case 
2: 
                                    
$nimage = imagecreatefromjpeg($_FILES["userfile"]["tmp_name"]); 
                                    
imagecopyresampled($image, $nimage, 0, 0, 0, 0, $width, $height, $width, $height);
                                    
$create_img = imagejpeg($image, $upload_dir.'/'.$new_name.'.jpg', 100);
                                    break;
                                  
                                case 
3: 
                                    
$nimage = imagecreatefrompng($_FILES["userfile"]["tmp_name"]); 
                                    
imagecopyresampled($image, $nimage, 0, 0, 0, 0, $width, $height, $width, $height);
                                    
$create_img = imagepng($image, $upload_dir.'/'.$new_name.'.png', 100);
                                    break;
                            }
                            
                            
                            if (
$create_img)   
                                
$info = 'Баннер успешно загружен';   
                            else   
                                
$error = 'Не удалось загрузить баннер';
                    
                        }
                        else 
                            
$error = 'Баннер должен быть размером 468x60';                                                
                      }
                    else 
                        
$error = 'Загруженный файл не является изображением';                                          
                }    
                else   
                    
$error = 'Размер баннера больше допустимого';   
            }    
            else   
                
$error = 'У файла недопустимое расширение';   
        }    
        else   
        {   
            
# массив ошибок   
            
$error_values = array(  

                
UPLOAD_ERR_INI_SIZE   => 'Размер файла больше разрешенного директивой upload_max_filesize в php.ini',   
                
UPLOAD_ERR_FORM_SIZE  => 'Размер файла превышает указанное значение в MAX_FILE_SIZE',                             
                
UPLOAD_ERR_PARTIAL    => 'Файл был загружен только частично',    
                
UPLOAD_ERR_NO_FILE    => 'Не был выбран файл для загрузки',    
                
UPLOAD_ERR_NO_TMP_DIR => 'Не найдена папка для временных файлов',    
                
UPLOAD_ERR_CANT_WRITE => 'Ошибка записи файла на диск'  

                                  
);   
       
            
$error_code = $_FILES['userfile']['error'];   
       
            if (!empty(
$error_values[$error_code]))   
                
$error = $error_values[$error_code];   
            else   
                
$error = 'Не известная ошибка, сообщите о проблеме администраторам';   
        }   
       
        return array(
'info' => $info, 'error' => $error);   
    }   
       
       
       
       
##################################/       
    
$extensions = array('jpg', 'jpeg', 'png', 'gif');   
    
$upload_dir = 'uploads';   
       
    
# Запускаем функцию   
    
if(!empty($_POST['upload_submit']))  
    {       
        
$message = uploadHandle(100, $extensions, $upload_dir);   
     
        
# Выводим сообщение   
        
echo $message['error'] ? $message['error'] : $message['info'];   
    }  
?>   

<form action="" method="post" enctype="multipart/form-data">   
    <input type="file" name="userfile" />   
    <input type="submit" value="Закачать" name="upload_submit" />   
</form>

  Ответить  
 
 автор: cheops   (29.06.2012 в 12:10)   письмо автору
 
   для: Ванек2010   (29.06.2012 в 11:13)
 

Лучше проверить, попробуйте загрузить файл с расширением PHP - судя по всему скрипт его не пропускает, но лучше удостоверится точно.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования