Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Детальная проверка загружаемого файла

3.0K
14 мая 2007 года
NetWork
77 / / 10.08.2006
Недавно сталкнулся со взломом сайта. Хорошо система переписывалась и новая версия с заплатками и т.д. пришла на замену старой.

Правда я немного сомневаюсь в одном файле. Скрипт загружает баннер на сервер.

ПОсмотрте пожалуйста может нужно сделать ещё какую проверку или того, что есть сейчас достаточно для защиты?

P.S. Я непрошу проверять код, он работает. ПРосто систему защиты.

Код:
if (isset($_POST['action'])) $action = $_POST['action']; else $action = "";

if ($action == "add") {

    #допустимый размер
    $max_size = 25 * 1024;
   
    #допустимое расширение
    $valid_types = array("gif","jpg", "png", "jpeg", "swf");

    if(isset($_FILES["file"]) && is_uploaded_file($_FILES["file"]["tmp_name"]) && $_FILES["file"]["size"]) {
           
        #определяем расширение файла
        $ext = substr($_FILES['file']['name'], 1 + strrpos($_FILES['file']['name'], "."));
           
        #проверяем размер
        if ($_FILES['file']['tmp_name'] > $max_size) {
            $err = 1;
            mes_error("Баннер не может быть больше 25 кБт!");
        }
        #проверяем расширение
        elseif (!in_array($ext, $valid_types)) {
            $err = 1;
            mes_error("Недозволенное расширение файла. Используйте только: .gif, .png, .jpg и swf");
        }
        else {
       
            #новое имя
            $new_file_name = md5(time());
           
            $type_upload = GetImageSize($_FILES["file"]["tmp_name"]);

            #определяем графический тип файла для последующего его сохраниения
            switch ($type_upload[2]):
           
                case 1: $new_file_name = "$new_file_name.gif";
                break;
           
                case 2: $new_file_name = "$new_file_name.jpg";
                break;
           
                case 3: $new_file_name = "$new_file_name.png";
                break;
               
                case 4: $new_file_name = "$new_file_name.swf";
                break;
               
                case 13: $new_file_name = "$new_file_name.swf";
                break;
           
            endswitch;
           
            if (move_uploaded_file($_FILES["file"]["tmp_name"], "$http_abs_address/images/temp/$new_file_name")) {
           
                $SourceFilename = "$http_abs_address/images/temp/$new_file_name";
                $type = GetImageSize($SourceFilename);
               
                #проверяем файл ли это
                if (filetype($SourceFilename) != "file") {
                    $err = 1;
                    mes_error("Это не файл!");
                }
   
                #определяем тип файла
                if (($type[2] != 1)and($type[2] != 2)and($type[2] != 3)and($type[2] != 4)and($type[2] != 13)) {
                    $err = 1;
                    mes_error("Выбранный файл имеет неверный формат!");
                }
               
                #размер файла
                if (filesize($SourceFilename) >= $max_size) {
                    $err = 1;
                    mes_error("Файл не может быть больше 25 кБт!");
                }
               
                #проверяем ширину графического файла
                if ($type[0] != 100) {
                    $err = 1;
                    mes_error("Ширина картинки строго 100 пикселей!");
                }
   
                #проверяем высоту графического файла
                if ($type[1] != 100) {
                    $err = 1;
                    mes_error("Высота картинки строго 100 пикселей!");
                }

                #если ошибок нет (выополняем загрузку файла)
                if ($err == 0) {
                   
                    mes("Баннер загружен");
                   
                    switch ($type_upload[2]):
                   
                        case 1:
                   
                        case 2:
                   
                        case 3: echo '<img src=/images/'.$new_file_name.' border="0" width="100" height="100">';
                        break;
                       
                        case 4:
                        echo '
                        <object
                          classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
                          codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
                          id="PR"
                          width="100" height="100"
                        >
                          <param name="movie" value="'
.$http_address.'/images/'.$new_file_name.'">
                          <param name="bgcolor" value="#FFFFFF">
                          <param name="quality" value="high">
                          <param name="allowscriptaccess" value="samedomain">
                          <embed
                            type="application/x-shockwave-flash"
                            pluginspage="http://www.macromedia.com/go/getflashplayer"
                            name="PR"
                            width="100" height="100"
                            src="'
.$http_address.'/images/'.$new_file_name.'"
                            bgcolor="#FFFFFF"
                            quality="high"
                            swliveconnect="true"
                            allowscriptaccess="samedomain"
                          >
                            <noembed>
                            </noembed>
                          </embed>
                        </object>'
;
                        break;
                       
                        case 13:
                        echo '
                        <object
                          classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
                          codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
                          id="PR"
                          width="100" height="100"
                        >
                          <param name="movie" value="'
.$http_address.'/images/'.$new_file_name.'">
                          <param name="bgcolor" value="#FFFFFF">
                          <param name="quality" value="high">
                          <param name="allowscriptaccess" value="samedomain">
                          <embed
                            type="application/x-shockwave-flash"
                            pluginspage="http://www.macromedia.com/go/getflashplayer"
                            name="PR"
                            width="100" height="100"
                            src="'
.$http_address.'/images/'.$new_file_name.'"
                            bgcolor="#FFFFFF"
                            quality="high"
                            swliveconnect="true"
                            allowscriptaccess="samedomain"
                          >
                            <noembed>
                            </noembed>
                          </embed>
                        </object>'
;
                        break;
                   
                    endswitch;
       
                    #переносим файл с временного раздела в постоянный
                    rename ("$http_abs_address/images/temp/$new_file_name", "$http_abs_address/images/$new_file_name") or die("Нельзя закачать файл");
                }
                else {
                    unlink ("$http_abs_address/images/temp/$new_file_name") or die("Нельзя удалить файл");
                }
            }
            else {
                mes_error("Ошибка при перемещении файла!");
            }
        }
    }
    else {
        mes_error("Файл не загружен");
    }
}
13
14 мая 2007 года
RussianSpy
3.0K / / 04.07.2006
Цитата:

mes_error("Файл не может быть больше [COLOR="Red"]25 кБт[/COLOR]!");


Не припомню чтобы существовало такое сокращение

12
14 мая 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: RussianSpy
Не припомню чтобы существовало такое сокращение


Есть такое есть... пытались когда такое стандарт привить.... не прижилось :D типа подчернуть, что это двоичные байты/биты.
http://www.artlebedev.ru/kovodstvo/84/

14K
14 мая 2007 года
Snk
54 / / 22.03.2007
Мне понравилась проверка на вес)))
 
Код:
if ($_FILES['file']['tmp_name'] > $max_size)

То есть можно залить без ограничения))
3.0K
14 мая 2007 года
NetWork
77 / / 10.08.2006
А что с защитой скрипта?

P.S. Зачем было давать ссылку на А.Лебедева мне не очень понятно. Мне кажется в подобных случиях лучше ссылаться на ru.wikipedia.org :)
14K
14 мая 2007 года
Snk
54 / / 22.03.2007
Вообще ужасный код...
3.0K
14 мая 2007 года
NetWork
77 / / 10.08.2006
Цитата: Snk
Вообще ужасный код...



Давайте не будем говорить загадками и просто флудить. Если говорите, то конкретно пожалуйста.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог