Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Загрузка файла на сервер с допустимым расширением
 
 автор: ols   (24.08.2008 в 17:15)   письмо автору
 
 

Ниже приведенный скрипт успешно загружает файлы на сервер , но проблема в том что мне нужно чтобы он сверял есть ли такое расширение в массиве $extentions = array(".gif",".jpg",".jpeg"); , если да, то разрешаем загрузку, в противном случае нет.



<?
$extentions 
= array(".gif",".jpg",".jpeg");


    if (!empty(
$_FILES['image']['tmp_name']))
          {
              if(
in_array(strrchr($_FILES['attach']['name'], "."),$extentions))

              {
            
// Определяем расширение файла
            
$ext strrchr($_FILES['image']['name'], ".");
            
// Формируем путь к файлу
                
$image "bns/".date("YmdHis",time())."$ext";
            
        if (
copy($_FILES['image']['tmp_name'], "../".$image))
            {
              
// Уничтожаем файл во временной директории
                  
unlink($_FILES['image']['tmp_name']);
              
// Изменяем права доступа к файлу
              
chmod("../".$image0644);
                }
                echo 
"Фотография успешно загружена";
          } else echo 
"Файл имеет недопустимое расширение!";

    }  else echo 
"Фотография не загружена</br>"
?>



В чем может моя ошибка?

  Ответить  
 
 автор: BinLaden   (24.08.2008 в 17:16)   письмо автору
 
   для: ols   (24.08.2008 в 17:15)
 

В том, что Вы проверяете расширение у файла attach, а не image.

  Ответить  
 
 автор: ols   (24.08.2008 в 17:30)   письмо автору
 
   для: BinLaden   (24.08.2008 в 17:16)
 

Мда...Из учебника скопировал, лень было проверить внимательнее. Спасиба большое!

  Ответить  
 
 автор: BinLaden   (24.08.2008 в 17:32)   письмо автору
 
   для: ols   (24.08.2008 в 17:30)
 

Обычно для отслеживая таких ошибок существуют Notice. Вам их там в учебнике случаем не советуют вырубить?

  Ответить  
 
 автор: ols   (24.08.2008 в 18:16)   письмо автору
 
   для: BinLaden   (24.08.2008 в 17:32)
 

Вообще-то я и не выставлял уровень ошибок, если Вы это имеете ввиду

  Ответить  
 
 автор: Valick   (24.08.2008 в 17:44)   письмо автору
 
   для: ols   (24.08.2008 в 17:30)
 

Из учебника скопировал, лень было проверить
Дальше так будете продолжать "в минуса" уйдёте...

  Ответить  
 
 автор: sim5   (24.08.2008 в 18:10)   письмо автору
 
   для: ols   (24.08.2008 в 17:15)
 

Совсем недавно "махали кулаками" по этому поводу и опять... Ну уж, если проверять, доверяя браузеру, то уж хотя бы по $_FILES['image']['type'], но никак по тому, что там после точки написано. Все-ли браузеры передают корректно тип изображения, стоит-ли доверять им, сказать не могу, но, если есть способ проверить это иным путем, более надежным, то почему не использовать. Не верьте тому, что стоит после точки.

  Ответить  
 
 автор: ols   (24.08.2008 в 18:19)   письмо автору
 
   для: sim5   (24.08.2008 в 18:10)
 

Не совсем понял о чем Вы. Имеете ввиду что данный способ на допустимость расширений является ненадежным?

  Ответить  
 
 автор: sim5   (24.08.2008 в 18:21)   письмо автору
 
   для: ols   (24.08.2008 в 18:19)
 

А вы считаете надежным? А что мне мешает "обматерить" любой файл расширением, например, .jpg? Ваша проверка по тому, что "за точкой", без проблем его пропустит, не так ли?

  Ответить  
 
 автор: ols   (24.08.2008 в 18:27)   письмо автору
 
   для: sim5   (24.08.2008 в 18:21)
 

Ну да впринципе Вы правы. Ну если даже файл img.php переименовать в img.jpg, залить его на сервер и с графическим расширением его разве можно как-то исполнить?

  Ответить  
 
 автор: sim5   (24.08.2008 в 18:32)   письмо автору
 
   для: ols   (24.08.2008 в 18:27)
 

Напрямую нельзя, имея "помощника", можно. И вообще - вам мусор на сайте нужен?

PS. А вот по поводу применения функции copy() при загрузке, смотрим здесь http://softtime.ru/forum/read.php?id_forum=1&id_theme=57057&page=2

  Ответить  
 
 автор: ddhvvn   (24.08.2008 в 18:24)   письмо автору
 
   для: sim5   (24.08.2008 в 18:10)
 

А еще лучше, после закачки перепроверить с помощью mime_content_type

  Ответить  
 
 автор: mehelson   (24.08.2008 в 18:36)   письмо автору
 
   для: sim5   (24.08.2008 в 18:10)
 

Верить тому, что после точки - нельзя!
Доверять типу МIМЕ-файла, согласно информации клиента - ненадежно...
Как проверить расширение?

  Ответить  
 
 автор: ols   (24.08.2008 в 18:45)   письмо автору
 
   для: mehelson   (24.08.2008 в 18:36)
 

Да, именно!
to Sim, конечно мусор ненужен. просто нужно убедиться что пользователь закачивает графический файл, а не текстовый

  Ответить  
 
 автор: sim5   (24.08.2008 в 18:49)   письмо автору
 
   для: mehelson   (24.08.2008 в 18:36)
 

Для изображений getimagesize() или exif_imagetype(), которая работает быстрее первой.

  Ответить  
 
 автор: mehelson   (24.08.2008 в 19:08)   письмо автору
 
   для: sim5   (24.08.2008 в 18:49)
 

С изображениями замечательно!
A как быть с архивами, например?
Как-то здесь, на форуме, проскакивала мысль: считать содержимое файла и проверить наличие определенного набора символов в начале, jрg - JFIF, ziр - РК
:)

  Ответить  
 
 автор: sim5   (24.08.2008 в 20:22)   письмо автору
 
   для: mehelson   (24.08.2008 в 19:08)
 

Да, и не только мысль, но и, вроде бы, пример разбирался.

  Ответить  
 
 автор: mehelson   (24.08.2008 в 20:53)   письмо автору
 
   для: sim5   (24.08.2008 в 20:22)
 

Так насколько я помню к консенсусу не пришли!?
Не напомните страницу обсуждения?

  Ответить  
 
 автор: sim5   (24.08.2008 в 21:33)   письмо автору
 
   для: mehelson   (24.08.2008 в 20:53)
 

Консенсус - это призрачность общей точки зрения, при твердой уверенности в правоте собственной :) Нет, не помню.

  Ответить  
 
 автор: mehelson   (24.08.2008 в 22:06)   письмо автору
 
   для: sim5   (24.08.2008 в 21:33)
 

Красиво :)
а Ваше мнение, имеет ли право на существование file_get_cоntеnts('filenаmе', FАLSЕ, NULL, 0, 20);

  Ответить  
 
 автор: ddhvvn   (24.08.2008 в 23:03)   письмо автору
 
   для: mehelson   (24.08.2008 в 22:06)
 

И что же Вам это даст?

  Ответить  
 
 автор: mehelson   (25.08.2008 в 02:50)   письмо автору
 
   для: ddhvvn   (24.08.2008 в 23:03)
 

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

  Ответить  
 
 автор: sim5   (25.08.2008 в 07:21)   письмо автору
 
   для: mehelson   (25.08.2008 в 02:50)
 

Все типы файлов, которые имеют идентификатор типа в заголовке, можно определить таким способом.

  Ответить  
 
 автор: vvz   (28.05.2009 в 23:32)   письмо автору
 
   для: ols   (24.08.2008 в 17:15)
 

Всем здрасте! Перечитал пару раз ветку, но вопрос остался: A как же всё таки быть с архивами, например? Дебаты - это хорошо, но может кто знает готовое и безопасноене решение?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования