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
Форумы портала PHP.SU :: Версия для печати :: Форма загрузки. Помогите добавить проверку PNG JPG
Форумы портала PHP.SU » » Вопросы новичков » Форма загрузки. Помогите добавить проверку PNG JPG

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

1. kuzmit4 - 10 Августа, 2015 - 17:15:11 - перейти к сообщению
Есть файл загрузки фалов. Помогите пожалуйста добавить проверку на 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. }
2. Flash_PR - 10 Августа, 2015 - 18:07:33 - перейти к сообщению
Смотри $_FILES['image']['type].......там тип загружаемого файла.......
3. Viper - 10 Августа, 2015 - 19:35:20 - перейти к сообщению
Ну или функция для проверки 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. }
4. teddy - 10 Августа, 2015 - 20:24:19 - перейти к сообщению
Самое прикольное то, что насовать левые файлы можно как в случае первой предложенной проверки, так и в случае второй ))
Да, это распространенные "варианты", но спасут только от определенных ситуаций.

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

Я предлагаю,

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

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

Вообщем у меня всё, более подробно - в поисковиках и бложеках ну и конечно же собственные "ковыряния", куда же без них Улыбка
5. Viper - 10 Августа, 2015 - 20:47:51 - перейти к сообщению
teddy пишет:
И да, если проверять mime, то лучше ещё и проверить соответствие mime из $_FILES и finfo/exif.
я бы назвал это методом костылезации.
1. требует модуль
2. не всегда точен.
вывод = зачем такая проверка.
6. DelphinPRO - 10 Августа, 2015 - 20:53:49 - перейти к сообщению
Ребятки, остановитесь. Человек не может расширение загруженного файла сравнить. Попросил помочь. А вы ему сразу инструкцию по сборке истребителя суёте.
(Добавление)
kuzmit4
У вас есть строчка



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

PHP:
скопировать код в буфер обмена
  1. if ($data === false) {
  2.   echo 'Недопустимый формат файла. Пожалуйста загружайте только картинки';
  3.   exit;
  4. }
7. teddy - 10 Августа, 2015 - 21:13:25 - перейти к сообщению
Viper
Хм а где тут костыль? это скорее усиление "брони" приложения.
Хуже не будет, успокоит школьников, добавит поинтов пристижа в копилку безопасности.

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

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

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

Ладно, как обычно, пишу зря) Полагайтесь на type и ждите гостей, если вы не "Неуловимый Джо".
8. Viper - 10 Августа, 2015 - 21:30:35 - перейти к сообщению
teddy пишет:
Хм а где тут костыль? это скорее усиление "брони" приложения.
Хуже не будет, успокоит школьников, добавит поинтов пристижа в копилку безопасности.

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

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

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

PS! Ну и конечно куда ж без проверки сигнатур.
9. DelphinPRO - 10 Августа, 2015 - 21:35:21 - перейти к сообщению
teddy пишет:
Ладно, как обычно, пишу зря

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

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

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

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

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

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

Уточню, действительно только для случаев, когда mime определяется HTTP клиентом, например, браузером.

 

Powered by ExBB FM 1.0 RC1