На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Дополнения к правилам (только для данного раздела)
- Используйте подсветку синтаксиса при выделении исходного кода;
- В описании темы обязательно укажите язык программирования;
- Прежде чем задать вопрос, обязательно воспользуйтесь поиском и загляните в FAQ раздела.
- Если вопрос касается серверного ПО, указывайте ОС.
- Если вопрос касается ASP.NET то лучше будет задать его в соответствующем разделе. Там вы сможете получить ответ намного быстрее.

Модераторы: Serafim, fatalist
  
> Что-то вроде bug report, ошибки при использовании "очевидного"
    Сюда скидываем следующее:
    1. Описание дырки
    2. Способы устранения/минимизации последствий/защиты.

    Перед постом обязательно почитать BugTrack соответствующего языка.
    Если соберетесь публиковать эксплойт (рабочий код), то лучше скиньте его сначала мне. Во избежание, так сказать.
      Недостаточная проверка данных при использовании функции getimagesize().

      Язык: PHP 4/5
      Источник: прверка рисунка на вшивость
      Классификация: выполнение произвольного кода
      Функция: getimagesize()
      Описание:
      Функция getimagesize не совсем корректно обрабатывает графические файлы, проверка осуществляется на основе начала файла (содержащего служебную информацию) к тому же независимо от расширения файла. Существует возможность дописать в конец файла произвольный PHP код. При этом изображение будет распознано как корректное.
      Опасность заключается в том, что проверка загруженных графических файлов на основе одной лишь функции getimagesize позволяет закачать любой PHP файл.

      Пример:
      Любое GIF изображение открывается каким либо текстовым редактором, в конец дописывается PHP код, файл переименовывается в somefile.php и закачивается на сервер, при недостаточной проверке данных файл окажется загруженным с расширением PHP, что позволит его исполнить.

      Защита:
      Дополнительно проверять входные файлы на корректность имени.
      Один из вариантов:
      ExpandedWrap disabled
        if(preg_match('/\.(gif|png|jpg|jpeg)$/i',$_FILES['userfile']['name'])){
            //Необходимые операции
        }
      PS:
      Пост призван указать на аккуратность использования этой функции, а не на её неверность.
      Сообщение отредактировано: Pr0[)!9Y -
        А кто сказал, что getimagesize() должна проверять вшивость картинки? Она возвращает размер и предполагаемый тип. Баг или дыра в данном случае не в языке, а в программисте, который использует эту функцию не по назначению.
          Цитата Pr0[)!9Y @
          Наверно стоит произвести зачиску по жесткой схеме
          поставила на отложенное удаление все, кроме поста Pr0[)!9Y и замечания от Miscђka

          ЗЫ: предложения по названию принимаются...

          Добавлено
          И еще для размышления:
          Цитата nerezus @
          Далеко ходить не надо: файл с именем blah.ext1.ext2, где в апаче не зарегана ext2, будет работать так, как будто .ext2 в имени нету.
          Например blah.php.lol будет обработан хендлером для пхп.
          Защита: исправить регэксп на /^[^.]+\.(gif|png|jpg|jpeg)$/i
            Цитата
            Защита: исправить регэксп на /^[^.]+\.(gif|png|jpg|jpeg)$/i
            Ну это немного не то.
            Для закачек: либо давать закачивать файлы только с определенными расширениями(т.е. все, что не разрешено - запрещено), либо менять имена файлов при закачке.

            Однако даже если есть возможность закачать картинку, то в нее можно запихать свой код(поэтому некоторые движки держат картинки/аватары в базе).
            И если движок содержит локальный инклюд, то.... можно сказать, что инклюд становится нелокальным =)
            Таким образом, к примеру, была поломана mazafaka.ru :D

            Сообщения были разделены в тему "проверка данных при использовании функции getimagesize()"
            user posted image
            HungeR.ru
              Здравствуйте,

              у меня проблема:

              Я создаю папки которые были с помощью Php

              ExpandedWrap disabled
                mkdir($_SERVER['DOCUMENT_ROOT']."/galerypath/".$newMenuItem_path, 0777);


              Вот папки которые таким образом создаются, они имеют следующие параметры:

              ExpandedWrap disabled
                drwxrwxrwx    8 hostnam  hostnam      4096 May 31 09:27 .
                drwxr-xr-x   18 hostnam  hostnam      4096 May 30 10:26 ..
                drwxr-xr-x    3 99       99           4096 May 29 12:16 ..odnotonni1
                drwxr-xr-x    3 99       99           4096 May 29 14:43 1111
                drwxr-xr-x    3 99       99           4096 May 30 09:54 odnoton
                drwxr-xr-x    3 99       99           4096 May 29 12:25 odnotonni
                drwxrwxrwx    3 hostnam  hostnam      4096 May 29 15:16 odton
                drwxr-xr-x    3 99       99           4096 May 29 12:26 ondnotonni


              Папка odton была создана через фтп. С ней все нормально.
              Но другие папки были созданы через php команду. К эитм папкам созданым програмным путем из скриптов есть доступ (то есть я могу сохранять и удалять внутри их файлы).
              К тем же папкам нет доступа по фтп. То есть я не могу изменять их параметры (доступ на запись и т.д.). И самое главное: Я не могу из фтп сохранить в них файлы. Не могу также по фтп удалить эти папки и удалить файлы из них.
              Сообщение отредактировано: lyubchick -
                Давно не общался с никсами, но что-то ещё помню...

                rwxr-xr-x
                владелец может всё, остальные только читать и исполнять
                ...
                владельцы у odton'а и остальных папок - разные пользователи, потому что пхп и фтп сервера (или правильнее сказать "демоны"? поправьте плиз) запускаются от разных пользователей... отсюда и все неурядицы...
                ....
                вобщето в баг репорт имхо неверно писать это... где здесь ПХПшный баг?
                Если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться...
                  lyubchick, бывает такое. Не разбирался с чем это связано, но указание прав при создании у меня что-то тоже не всегда работает. Вообщем так:
                  1) попробуй chmod
                  2) umask(0000);

                  Добавлено
                  А тема действительно должна быть отдельной, по крайней мере до выяснения.
                    В данном случае просто фтп сервер сохраняет файлы от одного пользователя, веб сервер от того под которым запущен, вот они и ставят влядельцев так. Высталяй права, а так как группы разные, то надо выставлять полные права, что совсем не безопасно, можно использовать chown для смены владельца. Но это может сделать только владелец или рут.
                    CPU not found, press any key for software emulation.
                    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script Execution time: 0,1029 ]   [ 16 queries used ]   [ Generated: 21.10.19, 15:23 GMT ]