Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр 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$nimage0000$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$nimage0000$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$nimage0000$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 Яндекс.Метрика Яндекс цитирования