Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Форма загрузки. Помогите добавить проверку PNG JPG

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
kuzmit4
Отправлено: 10 Августа, 2015 - 17:15:11
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Март 2015  


Помог: 0 раз(а)




Есть файл загрузки фалов. Помогите пожалуйста добавить проверку на PNG JPG GIF, Чтобы можно было грузить только картинки.

PHP:
скопировать код в буфер обмена
  1. if(isset($_FILES['image'])){
  2.     $img = $_FILES['image'];
  3.     $path = "../data/upload/" . rand().$img["name"];
  4.     move_uploaded_file($img['tmp_name'],$path);
  5.     $data = getimagesize($path);    
  6.     $link = "http://$_SERVER[HTTP_HOST]"."/".$path;
  7.     $res = array("upload" => array(
  8.                             "links" => array("original" => $link),
  9.                             "image" => array("width" => $data[0],
  10.                                              "height" => $data[1]
  11.                                             )                              
  12.                 ));
  13.     echo json_encode($res);
  14. }
 
 Top
Flash_PR
Отправлено: 10 Августа, 2015 - 18:07:33
Post Id



Посетитель


Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013  
Откуда: Санкт-Петербург


Помог: 6 раз(а)




Смотри $_FILES['image']['type].......там тип загружаемого файла.......


-----
Умные мысли приходят тогда, когда все глупости уже сделаны...
 
My status
 Top
Viper
Отправлено: 10 Августа, 2015 - 19:35:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Ну или функция для проверки mime-типа

PHP:
скопировать код в буфер обмена
  1. public function detectMime($path)
  2. {
  3.         $mime = 'text/plain';
  4.  
  5.         if (!empty($path) && is_file($path))
  6.         {
  7.                 if (function_exists('finfo_open'))
  8.                 {
  9.                         $finfo = finfo_open(FILEINFO_MIME_TYPE);
  10.                         $mime = finfo_file($finfo, $path);
  11.                         finfo_close($finfo);
  12.                 }
  13.                 elseif (function_exists('mime_content_type'))
  14.                 {
  15.                         $mime = mime_content_type($path);
  16.                 }
  17.         }
  18.  
  19.         return $mime;
  20. }


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
teddy
Отправлено: 10 Августа, 2015 - 20:24:19
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Самое прикольное то, что насовать левые файлы можно как в случае первой предложенной проверки, так и в случае второй ))
Да, это распространенные "варианты", но спасут только от определенных ситуаций.

Эти проверки, скорее, для пристижа Улыбка Что бы спугнуть часть нападающих Улыбка
Но спать спокойно не выйдет.

Я предлагаю,

1. Обязательно проверять расширение файла
2. Если оно валидно, пересохранять картинку используя GD (это выкинет вредоносный код из файла, если он есть)
3. Если сохраняете файлы в директории у себя на сервере, отключайте там возможность исполнять PHP код.
4. Не позволять пользователю контролировать название загруженных файлов (переименовывать их)

Естественно это не все нюансы безопасности загрузки файлов, но для картинок меня ещё не подводило.
И да, если проверять mime, то лучше ещё и проверить соответствие mime из $_FILES и finfo/exif.
Бывают случаи, когда mime из $_FILES точнее чем finfo/exif. Угу.
Могут быть конечно проблемы при сравнении со всякими pjpeg, но будьте добры, используйте алиасы для "кривых" типов. Гулять так гулять)

Вообщем у меня всё, более подробно - в поисковиках и бложеках ну и конечно же собственные "ковыряния", куда же без них Улыбка
 
 Top
Viper
Отправлено: 10 Августа, 2015 - 20:47:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




teddy пишет:
И да, если проверять mime, то лучше ещё и проверить соответствие mime из $_FILES и finfo/exif.
я бы назвал это методом костылезации.
1. требует модуль
2. не всегда точен.
вывод = зачем такая проверка.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
DelphinPRO
Отправлено: 10 Августа, 2015 - 20:53:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Ребятки, остановитесь. Человек не может расширение загруженного файла сравнить. Попросил помочь. А вы ему сразу инструкцию по сборке истребителя суёте.
(Добавление)
kuzmit4
У вас есть строчка



Так вот после нее поставьте проверку

PHP:
скопировать код в буфер обмена
  1. if ($data === false) {
  2.   echo 'Недопустимый формат файла. Пожалуйста загружайте только картинки';
  3.   exit;
  4. }


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
teddy
Отправлено: 10 Августа, 2015 - 21:13:25
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Viper
Хм а где тут костыль? это скорее усиление "брони" приложения.
Хуже не будет, успокоит школьников, добавит поинтов пристижа в копилку безопасности.

А так да, как уже говорил, это можно обойти.

DelphinPRO
Инструкцию давать нужно. Ибо не дашь инструкцию сейчас - запомнит, и будет думать, что все пучком. Поэтому инпуты всюду дырявые.

да кстати, одного getimagesize тоже не достаточно, и его тоже можно обойти Радость

Ладно, как обычно, пишу зря) Полагайтесь на type и ждите гостей, если вы не "Неуловимый Джо".

(Отредактировано автором: 10 Августа, 2015 - 21:16:12)

 
 Top
Viper
Отправлено: 10 Августа, 2015 - 21:30:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




teddy пишет:
Хм а где тут костыль? это скорее усиление "брони" приложения.
Хуже не будет, успокоит школьников, добавит поинтов пристижа в копилку безопасности.

А так да, как уже говорил, это можно обойти.

плохо читали? Требует дополнительно php_mbstring и php_exif. Уже сужает круг возможности использования, тем более как и другие методы не дает гарантии, да ещё и ошибочный результат.

teddy пишет:
1. Обязательно проверять расширение файла
угумс. mp3 тоже конвертить в картинку? (утрирую)

PS! Ну и конечно куда ж без проверки сигнатур.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
DelphinPRO
Отправлено: 10 Августа, 2015 - 21:35:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




teddy пишет:
Ладно, как обычно, пишу зря

Отчего же зря? Правильно пишешь.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
teddy
Отправлено: 10 Августа, 2015 - 21:46:48
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Viper
Если вы читали внимательно, то я написал finfo/exif, т.е один из перечисленных, а не конкретно exif или оба сразу.
Что касается доступности - если пишем серьезное приложение, на шаредах ему не место, а если это не шаред, тогда речи о "недостающих" расширениях быть и не может.
И вообще, нормальный шаред хостер включает подобные расширения не задумываясь (если они отключены). А ненормальными лучше не пользоваться

Viper пишет:
плохо читали?

Viper пишет:
mp3 тоже конвертить в картинку?

Ага. Только плохо читали вы, а не я.
teddy пишет:
для картинок меня ещё не подводило

Мы же сейчас про картинки говорим?

Вообщем, я умываю руки)) Не хочу спорить с "аргументами".
(Добавление)
teddy пишет:
Бывают случаи, когда mime из $_FILES точнее чем finfo/exif

Уточню, действительно только для случаев, когда mime определяется HTTP клиентом, например, браузером.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB