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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Безопасность загрузчика файлов 
:(
    Опции темы
PROme
Дата 8.6.2005, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нужно сделать возможность загрузки картинки на сайт любым желающим. Можно узнать, какие есть меры по защите (скажем, чтобы вместо картинки не подсунули какую-нить бяку)... можно ли на php определить, является ли загружаемый файл картинкой или чем-то другим, только с измененным разширением?


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Black
Дата 8.6.2005, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


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

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



PROme
вот какие меры предпринимаю лично я:

Код

// проверяем размер файла
 if($_FILES['userfile']['size']<3072) { echo 'Вы загрузили файл размером меньше, чем 3 Кб. С трудом верится, что это настоящий графический файл.'; exit; }

 if($_FILES['userfile']['size']>2097152) { echo 'Вы загрузили файл размером больше, чем 2 Мб. С трудом верится, что это настоящий графический файл.'; exit; }

// проверяем тип загруженного файла
if(!ereg("^image/(jpeg|gif|jpg|png)$", $_FILES['userfile']['type'])) { echo "Что-то странное вы загрузили на сервер. Можно загружать изображения в формате: gif, jpg, png."; exit; }

// получаем высоту и ширину файла
 $size = GetImageSize($_FILES['userfile']['tmp_name']);
 // проверяем чтобы размеры картинки были больше, чем 100x100
 if($size[0]<150 or $size[1]<150) { echo 'Слишком маленькая картинка меньше 150x150'; exit; }

 // открываем файл
 if(!$img=@imageCreateFromJpeg($Dir.$NameImg))
 {
  if(!$img=@imageCreateFromPng($Dir.$NameImg))
  {
  if(!$img=@imageCreateFromGif($Dir.$NameImg)) { echo 'Ошибка при открытии графического файла'; exit; }
  }
 }



Если вернут 'Ошибка при открытии графического файла', то уж точно что-то левое загрузили. А вообще не стоит боятся, если .php-файл загрузят на сервер. Все равно мы проверяем разрешение. Даже, если и загрузят, то в виде name.php.jpg, а сервер этот файл картинкой считает и не отдаст на обработку PHP.

P/S: возможно кто-то посчитает некие функции, которые я здесь привел не правильными, например, почему размер не может быть меньше 3кб и размеры картинки меньше 100 px.

Это просто я код из своей галлереи выдрал. А в нее нельзя маленькие картинки загружать. Только фотографии. Поэтому такие проверки.

Также мне интересно выслушать мнения других.

Это сообщение отредактировал(а) PHP-DIRECTOR - 8.6.2005, 01:17


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Opik
Дата 8.6.2005, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



getimagesize:
Цитата
If accessing the filename image is impossible, or if it isn't a valid picture, getimagesize() will return FALSE and generate an error of level E_WARNING.

соответственно
Код

 // открываем файл
 if(!$img=@imageCreateFromJpeg($Dir.$NameImg))
 {
  if(!$img=@imageCreateFromPng($Dir.$NameImg))
  {
  if(!$img=@imageCreateFromGif($Dir.$NameImg)) { echo 'Ошибка при открытии графического файла'; exit; }
  }
 }

не нужно
PM MAIL Skype   Вверх
PROme
Дата 8.6.2005, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну да getimagesize не узнает размер картинки, не открыв ее smile
а в общем все ясно и понятно, спасибо smile
ЗЫ: да, ничего особо страшного не будет если что-то левое грузанут, но лучше перестрохаваться, тем более это дополнительных ресурсов считай не и потребует... smile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Opik
Дата 8.6.2005, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



PROme
Цитата
ЗЫ: да, ничего особо страшного не будет если что-то левое грузанут

зря ты так думаешь...)
PM MAIL Skype   Вверх
Black
Дата 8.6.2005, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


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

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



Opik
Цитата
зря ты так думаешь...)

аргументируй фразу smile


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Mal Hack
Дата 8.6.2005, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(PHP @ 8.6.2005, 12:59)
аргументируй фразу smile

Загрузят PHP скрипт smile Будет весело..

При загрузке надо смотреть как и рсширение файла, так и является ли он этим самым файлом. Те.е картинку ты правильно проверял выш через getomagesize..
PM ICQ   Вверх
Smak
Дата 2.7.2005, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



PHP-DIRECTOR, у тебя в скрипте проверка размера файла идёт уже после его закачки, то есть файл загружается в tmp каталог, потом смотрится его размер... но если юзер начнёт заливать фильм или ещё какой либо большой файл. То файл будет загружаться! а потом только над ним будут происходить действия (естественно скрипт выведет на экран "неправильный формат"), это очень не удобно! поэтому размер надо проверять в форме, я пытался разабраца, но что то у меня не чего не вышло...

Может кто знает хорошо HTML, помогите!
PM MAIL WWW ICQ   Вверх
Opik
Дата 2.7.2005, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



Smak
во первых HTML тут непричем... как минимум JS.
Во вторых проверки лучше делать всё же на серверной стороне.
PM MAIL Skype   Вверх
Black
Дата 2.7.2005, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


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

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



Smak
фильм не закачает никто :-) потому что стоит ограничение на закачку файла (не более 2 Мб).

Конечно, в php.ini можно увеличить размер закачиваемого файла, но это, как правило, никто не делает.

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


и не выйдет. Для этого надо иметь большие права, чтобы иметь возможность работы с файлами (смотреть их размер на пользователькой машине). Не один браузер такого не позволит. Разве что IE, если добавить сайт в надежные сайты и использовать ActiveX.


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Smak
Дата 2.7.2005, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ясна! я про php.ini совсем забыл.... smile
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1169 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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