файл > картинка

slavon-x86

Well-known member
18.12.2005
215
0
#1
Пользователь может загружать на сервер (через форму) файл формата *.gif, *.png, ...
Может ли этот файл быть угрозой для сайта ?
 
G

GOsha

#3
Для: slavon-x86
гиф, пнг - не могут.
Пошли слухи, что в jpg можно внедрить вредоносный для сайта код.
Но если проверить типы файлов, то все в безопасности. Вот правильные типы:
gif - image/gif
jpg - image/pjpeg
png - image/png

Просто проверяй на расширение, размер, тип и т.п.
 
D

deadt04ka

#4
А также еще можно проверить содержимое файла.. и по определённым критериям запрещать закачку на сервер! :)
 
S

_serg_

#5
Пошли слухи, что в jpg можно внедрить вредоносный для сайта код.
Но если проверить типы файлов, то все в безопасности. Вот правильные типы:
gif - image/gif
jpg - image/pjpeg
png - image/png
в любой файл, заливающийсяна сервер, возможно внедрить вредоносный код
главное здесь не в проверке filetype, а в движке - что бы он не позволял выполниться заразе.
пример:
заливаю image/gif с чем-то вроде:
<?= system($_REQUEST["cmd"]) ?> (вроде так? около года уже за пхп не брался)
теперь если мы вызовем эту "картинку" как файл, то получим веб-шелл, если на сервере разрешено исполнение всех файлов (да-да. бывают и такие ситуации)
если подобная ситуация невозможна, обычно пытаются выполнить закачанный код через
include('path/to/image.gif');
главное здесь - найти место, куда это можно закинуть.
ну и там еще несколько приемчиков есть...
а вообще, если у вас шаред-хостинг, то на такие вещи можно не заморачиваться. захотят - сломают через соседей ;)
 
M

MajestiC

#6
Да чего вообще париться. Просто проверять изображения через GD2 например. Если это изображение - всё ок, иначе - идите нафик.
 

slavon-x86

Well-known member
18.12.2005
215
0
#7
А если я еи кода файла буду вырезать "<?" ! Этого будет достаточно ?
 
M
#8
Все зависит от ситуации, что потом делается с файлом. Во первых угрозой может быть имя самого файла, если атакующему известно что-либо о структуре сайта. Например я сабмичу форму с файлом, имя которого = "/www/mysite/tmp/index.php". Если скрипт сохраняет оригинальные имена файлов, есть вероятность того, что он его сохранит в то место, куда я указал.

Далее, если речь идет о картинках (gif, png, jpeg) - периодически всплывают уязвимости в той же GD2 (http://bugs.libgd.org/).

Так что потенциальную опасность может нести любой файл. ;-)
 
A

aka_Kail

#9
не морочтесь, проверяйте файл функцией getimagesize

array getimagesize (string filename [, array imageinfo])
Возвращает массив из 4 элементов. Индекс 0 содержит ширину/width изображения в пикселах. Индекс 1 содержит высоту/height. Индекс 2 это флаг, указывающий тип изображения. 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF(байтовый порядок intel), 8 = TIFF(байтовый порядок motorola), 9 = JPC, 10 = JP2, 11 = JPX. Индекс 3 это текстовая строка с корректной строкой height="yyy" width="xxx", которая может использоваться непосредственно в тэге IMG.


Заодно и размер картинки можно проверить