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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PHP в src y <IMG>: насколько опасно? [защита при загрузке файла] 
:(
    Опции темы
Dmitry_177
Дата 27.1.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не так давно узнал что в тег <img> в src можно не только файл картинки писать, а например php-скрипт который генерирует картинку.. Так фот у меня возник вопрос в плане безопасности.. а если пользователь будет загружать файл картинки, он же может выбрать файл скрипта и тогда может случиться мало чего приятного... Как такого можно избежать? Можно проверять расширение файла.. Вот интересно, а если он php расширение сменит например на jpg, то скрипт выполнится?
PM MAIL   Вверх
GeneralElectric
Дата 27.1.2008, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Dmitry_177 @  27.1.2008,  20:05 Найти цитируемый пост)
 и тогда может случиться мало чего приятного... 

Чего именно? И почему нельзя загружать файл скрипта?

Цитата(Dmitry_177 @  27.1.2008,  20:05 Найти цитируемый пост)
Вот интересно, а если он php расширение сменит например на jpg, то скрипт выполнится? 

какой скоипт?

ты не мог бы свои фантазии описывать более конкретно? Не в виде "сменить шило на мыло", а с конкретными именами файлов и видимыми опаснстями.
PM MAIL   Вверх
Dmitry_177
Дата 27.1.2008, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ОК.. Есть форма для загрузки картинок, после загрузки эти картинки отображаются в <IMG>.. Вот я и предположил, если загрузить не картинку(*.jpg, *.gif, *.png) а php-скрипт(*.php), так вот по идее он выполнится, а это уже дыра в безопасности.. Чтобы этого не произошло, можно проверять расширение загружаемых файлов, т.е. файлы *.php НЕ загружать.. Но тут тоже можно попробовать обойти это... Написать скрипт, сохранить с расширением как *.jpg, тогда файл проверку на расширение пройдет и загрузится на сервер.. А вот при отображении, если в этом файле не картинка а скрипт, выполнится ли этот скрипт???
PM MAIL   Вверх
flashaa
Дата 27.1.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Скрипт с расширением жпг выполнится как скрипт, только если в настройке сервера прописано обрабатывать  файлы жпг как php-скрипты. Короче говоря, не выполнится.
PM MAIL   Вверх
Sannis
Дата 27.1.2008, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Другое дело, что содержимое загружаемых изображений(и вообще любого отображаемого в браузере фала) хорошо бы проверить на наличие html-кода, при отображении некоторых видов изображений в браузере выполняется этот код, в том числе и яваскрипт, а это уже возможность XSS. Пример из IP.B:
Код

    function check_xss_infile()
    {
        // HTML added inside an inline file is not good in IE...
        
        $fh = fopen( $this->saved_upload_name, 'rb' );
        
        $file_check = fread( $fh, 512 );
        
        fclose( $fh );
        
        if( !$file_check )
        {
            @unlink( $this->saved_upload_name );
            $this->error_no = 5;
            return;
        }
        
        # Thanks to Nicolas Grekas from comments at www.splitbrain.org for helping to identify all vulnerable HTML tags
        
        else if( preg_match( "#<script|<html|<head|<title|<body|<pre|<table|<a\s+href|<img|<plaintext|<cross\-domain\-policy#si", $file_check ) )
        {
            @unlink( $this->saved_upload_name );
            $this->error_no = 5;
            return;
        }
    }



--------------------
Я Критик Джим, раньше писал моды для IPB 1.3.x-2.3.x, а теперь продвигаю Node.js в массы.
PM MAIL WWW   Вверх
Dmitry_177
Дата 27.1.2008, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ок, подскажите тогда пожалуйста, какие файлы не следует загружать... Я для себя составлю списочек smile Пока он такой:

.php
.phtml
.phtm
.php3
.html
.htm
.pl
PM MAIL   Вверх
GeneralElectric
Дата 28.1.2008, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



надо составлять список не тех файлов, которые нельзя загружать, а тех, которые можно.
PM MAIL   Вверх
SelenIT
Дата 28.1.2008, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



Цитата(GeneralElectric @  27.1.2008,  23:19 Найти цитируемый пост)
Sannis, это шутка? 

GeneralElectric, похоже, не шутка. Есть у IE такая подлая черта - "MIME sniff". Пример Sannisа, судя по всему, ссылается вот на это.

Цитата(GeneralElectric @  28.1.2008,  00:12 Найти цитируемый пост)
надо составлять список не тех файлов, которые нельзя загружать, а тех, которые можно. 

Абсолютно верно (например, для картинок - .gif, .png, .jpg, .jpeg, можно еще .bmp). Для пущей уверенности можно на всякий случай проверять их ф-цией Sannisа. 






--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Dmitry_177
Дата 28.1.2008, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

надо составлять список не тех файлов, которые нельзя загружать, а тех, которые можно.

ок, тогда вот так:

.jpg
.jpeg
.gif
.bmp
.png

есть еще какие-нибудь расширения картинок отображаемые <IMG>?
PM MAIL   Вверх
skyboy
Дата 28.1.2008, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(Dmitry_177 @  27.1.2008,  23:19 Найти цитируемый пост)
есть еще какие-нибудь расширения картинок отображаемые <IMG>? 

зависит от браузера.
к примеру, текущий вариант FireFox умеет работать с SVG, некоторые браузеры работают с VML(Internet Explorer). Не делать же полный список всех возможных графических типов? Проще определить, что "я, мол, поддерживаю только то-то, то-то и то-то; остальное идет лесом".
PM MAIL   Вверх
Sannis
Дата 28.1.2008, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(GeneralElectric @  27.1.2008,  23:19 Найти цитируемый пост)
Sannis, это шутка?

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

Это сообщение отредактировал(а) Sannis - 28.1.2008, 00:54


--------------------
Я Критик Джим, раньше писал моды для IPB 1.3.x-2.3.x, а теперь продвигаю Node.js в массы.
PM MAIL WWW   Вверх
Golda
Дата 28.1.2008, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

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



Sannis, SelenIT, спасибо за интересную информацию


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
SelenIT
Дата 28.1.2008, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



Sannis, кстати, я тут задумался: а как можно использовать эту уязвимость? Скрипт в картинке ведь сработает, только если вызвать ее напрямую (в крайнем случае, через iframe/object), со стандартным <img src="..."> ничего страшного не грозит. Единственное, что приходит на ум - это сделать какую-нибудь пакость от имени авторизованного юзера (вроде такого, причем предложенная там защита по рефереру в этом случае как раз не поможет). Но такой случай, имхо, сам по себе довольно экзотичен, к тому же вскользь упомянутое там же "железное" решение (с уникальным идентификатором формы в сессии) не позволит и этого...

Но вообще, конечно, приведенный код (как и само поведение IE, правда) отдает каким-то шаманством. Ну почему '<a href=...' заставляет картинку отображаться как html, а '<a id=... href=...' - уже нет? Кто знает, нет ли еще подобных "волшебных" комбинаций?..


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
bars80080
Дата 28.1.2008, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



меня по-поводу шаманства преследует такая мысль:

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

(как при производстве памяти: штампуют стандартно 1024Мб, битых 300Мб, они дорезают до стандарта в 512 - вот и результат)

отсюда и проблемы в разнице стандартов

п.с. шутка, хотя кто его знает...
PM MAIL WWW   Вверх
Sannis
Дата 28.1.2008, 22:19 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



SelenIT, довольно просто. http://www.securitylab.ru/contest/291564.php, как раз годичной давности.


--------------------
Я Критик Джим, раньше писал моды для IPB 1.3.x-2.3.x, а теперь продвигаю Node.js в массы.
PM MAIL WWW   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0625 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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