Защита загрузки фаилов

I6
На сайте с 30.08.2007
Offline
23
938

Доброго времени суток!

Подскажите пожалуйста, как защитить формочку загрузки фотографий ?

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

Заранее благодарен.

Skom
На сайте с 02.12.2006
Offline
165
#1

Сделать проверку на имя файла через JavaScript

А вот проверку на размеры и разрешение - только после загрузки на сервер, например, через PHP.

Cras amet qui numquam amavit quique amavit cras amet
Shtogrin
На сайте с 02.11.2006
Offline
95
#2

Существующие рекомендации для input=file (accept="mime-types") клиентами не поддерживаются, поэтому у вас есть только один выход - проверять на сервере, см. getimagesize

www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
I6
На сайте с 30.08.2007
Offline
23
#3
Skom:
Сделать проверку на имя файла через JavaScript

Можно ведь на любом сайте с эмитировать страницу добавления обойдя JavaScript, таким образом защита окажется нулевой... может я что-то не понимаю?

А имя даже у троянской программы можно сделать troyan.jpg :)

и в этом случае фаил загрузится на сервер...

Можно сделать чтобы фаил допустим грузился на сервер, затем всячески проверялся и если возникал подозр, сразу удалялся ?

d1ma
На сайте с 18.03.2007
Offline
102
#4

надо проверку на увовне сервера делать 100% никак иначе

http запрос можно вобход html и javascript любой сделать

проще всего посмотреть как это у других сделано...

I6
На сайте с 30.08.2007
Offline
23
#5
d1ma:
надо проверку на увовне сервера делать 100% никак иначе

http запрос можно вобход html и javascript любой сделать

проще всего посмотреть как это у других сделано...

C этой целью я и создал этот топик, очень хотелось бы чтобы кто-нибудь поделился опытом, подсказал адреса нужных статей... Если можно примерный код обработки информации...

a.fatman
На сайте с 15.01.2006
Offline
127
#6

http://hu2.php.net/getimagesize

INFO56:
А имя даже у троянской программы можно сделать troyan.jpg
и в этом случае фаил загрузится на сервер...

Можно сделать чтобы фаил допустим грузился на сервер, затем всячески проверялся и если возникал подозр, сразу удалялся ?

Функцией getimagesize всячески проверяете. Она вернет вам и размеры, и тип картинки. Если все устраивает -- файл оставляете, если нет -- удаляете.

T
На сайте с 11.07.2007
Offline
43
#7

как уже говорилось, валидность изображения можно проверить getimagesize, кроме этого необходимо обязательно прописать картинке правильное расширение, выбрав его на основе пролученного типа изображения. Однако, сама по себе валидность картинки еще не означает её безопасность. Например, если у вас есть сценарий на php, содержащий в себе уязвимость локального подключения произвольного файла, то в качестве такого файла может быть выбрана спецально сформированная и изагруженная картинка, которая будет валидна для getimagesize, но содержать в себе что-то в роде "<?eval($_GET['p']);?>".......

[Удален]
#8

Как вариант, который я успешно использую на одном из сайтов: выводить не саму картинку, а читать её в GD и выводить оттуда. Если это была не картинка, то загружается заглушка. На некартинистость опять-таки проверяется через GetImageSize. Вывод через GD для будущей защиты от скриптов, которые смогут обманывать GetImageSize (впринципе есть идеи как можно обманывать, но копать в этом направлении не вижу смысла) - так если это всё-таки не картинка, то будет просто битое пустое изображение.

emzi
На сайте с 17.01.2007
Offline
46
#9

****дубль**

emzi
На сайте с 17.01.2007
Offline
46
#10

Начнем с того, что неизвестно, что у вас на серверной стороне - свой собственный скрипт, готовая система, на чем он/она написаны, исходя из этого можно будет давать конкретные советы.

Что касается общих соображений, то их уже изложили - проверять сответствие файла заданным параметрам (формат, размер, разрешение, итп) после загрузки на сервер. В отношении максимального физического размера файла, его можно ограничить уже на этапе загрузки.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий