Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка на сервер, чем это может гроить? 
:(
    Опции темы
chaos
Дата 18.10.2005, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 1
Всего: 44



Здрасте!!!! Давно я у Вас тут не был smile

Подскжите такую вещь: мне необходимо написать скриптик для загрузки jpg, gif, png на сервер
Меня интересует безопастность.
Те вопрос: Как обезопасить себя smile , сервер от всяких паразитов?

Добавлено @ 08:15
Если эта тема подымалась(искал вроде не нашел) прошу не бить

Заранее благодарен!!!
PM WWW   Вверх
Mal Hack
Дата 18.10.2005, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Обезопасить легко. При загрузке не допускай закгрузку файлов с другими расширениями.
У нас вот есть в FAQ код: http://forum.vingrad.ru/index.php?showtopic=11017
Но для твоего случая хочу привести код своего товарища, который написан не так давно и более подходит для твоей задачи: http://trinex.ru/phpscripts/view/107/
PM ICQ   Вверх
-=Ustas=-
Дата 18.10.2005, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



1. Проверка расширений, отсеивать исполняемые.
2. Переименовывать файлы при загрузке.
3. Менять права после загрузки.
4. Можно еще использовать для имен функции escapeshellarg() и escapeshellcmd().


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
chaos
Дата 18.10.2005, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 1
Всего: 44



спасибо!!!
PM WWW   Вверх
chaos
Дата 21.10.2005, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 1
Всего: 44



Mal Hack
а чето я не понял я использую этот класс ClassUploadFiles
он что ли сначала загружает весь файл на сервер а потом определяет размер?
потому что сейчас проверил сунул ему файл размером гиг, и он начинает его грузить.

Как узнать размер до загрузки на сервер?
PM WWW   Вверх
-=Ustas=-
Дата 21.10.2005, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Код

$_FILES['userfile']['size']



--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
chaos
Дата 21.10.2005, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 1
Всего: 44



но почемуто этот класс
Код

<?php

/*
+---------------------------------------------
|   UploadFiles.class.php
|   ==========================================
|   by tRiNEX
|   2005 (c)
|   ==========================================
|   Web: http://www.trinex.ru
|   Email: [email protected]
+---------------------------------------------
|
|   > Upload Files with web-interface.
|   > Date started: 18 Jule, 2005
|   > Filename: UploadFiles.class.php
|   > Version: 1.1
|
+---------------------------------------------

*/


/**
 * Класс для загрузки файлов через веб-интерфейс. Возможности: загрузка сразу нескольких файлов, проверка по расширеню файлов, проверка по размеру, проверка существования одноименного файла, выставление прав доступа.
 *
 */
Class Upload {

    /**
     * Массив имен полей в html форме.
     *
     * @var array of string
     */
    var $Files = array ( 'filename' );
    /**
     * Относительный или полный путь до директории загрузки.
     *
     * @var string
     */
    var $Dir = './uploads';
    /**
     * Опция, возможные варианты: 1\0. 1 - переименовывает загружаемые файлы по формату: годмесяцдень_***, где *** - случайные числа. 0 - загружает файлы с оригинальными именами.
     *
     * @var integer
     */
    var $UnicName = 1;
    /**
     * Опция, возможные варианты: 1\0. 1 - включает автовыставление прав доступа на файл. 0 - автовыставление выключено.
     *
     * @var integer
     */
    var $AutoChmod = 1;
    /**
     * Если опция AutoChmod включена, то будут выставлены права установленные в Chmod.
     *
     * @var integer
     */
    var $Chmod = 0644;
    /**
     * Опция, возможные варианты: 0\1\2. 0 - проверка на существование файла в загружаемой директории выключена, происходит перезапись файла, если файл существует.
     * 1 - проверка на существование файла включена, если файл существует, то вновь загружаемый файл загружен не будет.
     * 2 - ппроверка на существование файла включена, если файл существует, то вновь загружаемый файл будет переименован по формату имя_n, где 1,2,3..n и загружен.
     *
     * @var integer
     */
    var $CheckFile = 2;
    /**
     *  Массив разрешенных расширений файлов для загрузки.
     *
     * @var array of string
     */
    var $FilesExt = array ( 'gif', 'jpg', 'bmp' );
    /**
     * Максимальный размер загружаемых файлов в байтах.
     *
     * @var integer
     */
    var $MaxFileSize = 1024000000;
    /**
     * В данном массиве содержится информация о загруженных файлах (в случае успеха загрузки) или информация об ошибках (в случае неудачи).
     *
     * @var array of string
     */
    var $UploadedFiles;

    /**
     * Массив ошибок.
     *
     * @var array of string
     */
    var $ErrorsDesc = array (

    0 => 'Value: 0; There is no error, the file uploaded with success.',

    1 => 'Value: 1; The uploaded file exceeds the upload_max_filesize directive in php.ini.',
    2 => 'Value: 2; The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.',
    3 => 'Value: 3; The uploaded file was only partially uploaded.',
    4 => 'Value: 4; No file was uploaded.',
    5 => 'Value: 5; No file to upload',
    6 => 'Value: 6; Missing a temporary folder.',
    7 => 'Value: 7; Error of file extension.',
    8 => 'Value: 8; Error of file size',
    9 => 'Value: 9; Error of existing file. File already exist.'

    );

    /**
     * Главная функция класса, производит проверку и загрузку файлов, выставление прав, определение ошибок и т.д.
     *
     */
    function DoUpload () {

        @ set_time_limit ( 0 );

        foreach ( $this -> Files as $value ) {

            $flag = false;

            $filename = basename ( $_FILES[$value]['name'] );

            $file = $this -> _split_filename ( $filename );
            $ext = $file['ext'];
            $body = $file['body'];

            if ( ! in_array ( $ext, $this -> FilesExt ) ) {

                $this -> UploadedFiles[$value]['ErrorMsg'] = $this -> ErrorsDesc[7];

                $flag = true;

            }

            if ( $_FILES[$value]['name'] == '' ) {

                $this -> UploadedFiles[$value]['ErrorMsg'] = $this -> ErrorsDesc[5];

                $flag = true;

            }



            if ( $_FILES[$value]['size'] > $this -> MaxFileSize ) {


                $this -> UploadedFiles[$value]['ErrorMsg'] = $this -> ErrorsDesc[8];

                $flag = true;

            }


            $newname = ( $this -> UnicName == 1) ? date("ymd").'_'.mt_rand(100, 999).'.'.$ext : $filename;
            $file = $this -> _split_filename ( $newname );
            $body = $file['body'];
            $ext = $file['ext'];



            if ( is_file ( $this->Dir."/".$newname ) ) {

                if ( $this -> CheckFile == 1 ) {

                    $flag = true;
                    $this -> UploadedFiles[$value]['ErrorMsg'] = $this -> ErrorsDesc[9];

                } elseif ( $this -> CheckFile == 2 ) {

                    $i = 0;

                    while ( is_file ( $this->Dir."/".$newname ) ) {

                        $i++;
                        $newname = $body.'_'.$i.'.'.$ext;

                    }

                }

            }

            if ( ! $flag ) {
                if ( move_uploaded_file( $_FILES[$value]['tmp_name'], $this -> Dir."/".$newname ) ) {

                    $this -> UploadedFiles[$value]['Status'] = 1;
                    $this -> UploadedFiles[$value]['NewName'] = $newname;
                    $this -> UploadedFiles[$value]['Size'] = $_FILES[$value]['size'];

                    ($this -> AutoChmod == 1 ) ? @chmod ($this -> Dir."/".$newname, $this -> Chmod ) : '' ;

                } else {

                    $this -> UploadedFiles[$value]['ErrorMsg'] = $this -> ErrorsDesc[$_FILES[$value]['error']];

                }

            }

        }
    /**
     * Вспомогательная функция, возвращает массив, содержащий в себе расширение файла и тело имени файла.
     * image.gif -> ext = gif; body = image;
     *
     */}

    function _split_filename ( $file ) {

        $file = explode ( '.', $file);
        $ext = $file[ ( count ( $file ) - 1 ) ];
        unset ($file[ ( count ( $file ) - 1 ) ] );
        $name = implode ( '.', $file);
        $ret['ext'] = $ext;
        $ret['body'] = $name;

        return  $ret;

    }

}
?>    

пытается закачать большого размера файлы

вот сама форма
Код

<?php
require ("UploadFiles.class.php");


if ( isset ( $_POST['ok'] ) ) {
    
    $Upload  = new Upload();

    $Upload -> Files = array ('file1', 'file2');
    
    $Upload -> Dir = './uploads';
    
    $Upload -> UnicName = 0;
    $Upload -> AutoChmod = 1;
    $Upload -> Chmod =0644;
    $Upload -> CheckFile = 2;

    $Upload -> FilesExt = array ( 'gif', 'jpg' );
    $Upload -> MaxFileSize = 1024;

    $Upload -> DoUpload();
    
    print_r ($Upload -> UploadedFiles);
    
}
print '<form action="" method="post" enctype="multipart/form-data" name="upload_files" id="upload_files">
                   <input type="hidden" name="MAX_FILE_SIZE" value="1024">
             <table width="80%"  border="0" cellspacing="5" cellpadding="5">

               <tr>
                 <td rowspan="5" align="right" valign="top" class="tabl_4">Файлы для загрузки:</td>
                 <td class="tabl_4" align="left">                   <input name="file1" type="file" class="forminput" id="file1">                  </td>
               </tr>
               <tr>
                 <td class="tabl_4" align="left"><input name="file2" type="file" class="forminput" id="file2"></td>
               </tr>
               <tr align="center" valign="middle">
                 <td colspan="2" class="tabl_4"><input name="ok" type="submit" class="forminput" id="ok" value="Загрузить файлы"></td>
                </tr>
             </table>
 </form>';

?>

че не правельно??? или я гдето туплю???
Добавлено @ 11:46
вроде же написал максимальный размер 1024

Это сообщение отредактировал(а) chaos - 21.10.2005, 11:42
PM WWW   Вверх
chaos
Дата 21.10.2005, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 1
Всего: 44



помогите smile !!
PM WWW   Вверх
-=Ustas=-
Дата 21.10.2005, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



А ты не пробовал менять вот этот аттрибут класса:
Код

var $MaxFileSize = 1024000000;

на нужный размер тебе.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
chaos
Дата 21.10.2005, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 1
Всего: 44



блиннн!!! smile smile smile
в этом и есть моя проблема?
PM WWW   Вверх
-=Ustas=-
Дата 21.10.2005, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(chaos @ 21.10.2005, 13:57)
в этом и есть моя проблема?

Попробуй, узнаешь.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
tRiNEX
Дата 21.10.2005, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 30.11.2004

Репутация: нет
Всего: нет



Цитата

Опция MAX_FILE_SIZE является рекомендацией браузеру, даже если бы PHP также проверял это условие. Обойти это ограничение на стороне браузера достаточно просто, следовательно, вы не должны полагаться на то, что все файлы большего размера будут блокированы при помощи этой возможности. Тем не менее, ограничение PHP касательно максимального размера обойти невозможно. Вы в любом случае должны добавлять переменную формы MAX_FILE_SIZE, так как она предотвращает тревожное ожидание пользователей при передаче огромных файлов, только для того, чтобы узнать, что файл слишком большой и передача фактически не состоялась.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.