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

Форум PHP

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

 

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

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

тема: Определение типа файла при загрузке
 
 автор: Владимир22   (23.07.2006 в 14:01)   письмо автору
 
 

Подскажите, кто знает:
как проверять пользовательские файлы перед загрузкой на сервер на типы, например, чтобы было разрешено только закачивать изображения, или музыку, или просто текстовые файлы.
И ещё вопрос: насколько такая проверка обезопасит сайт от возможных хакеров и их атак. Может есть способ ещё надёжнее для проверки загружаемого? Заранее спасибо, кто поможет советом.

   
 
 автор: BobiKK   (23.07.2006 в 14:06)   письмо автору
 
   для: Владимир22   (23.07.2006 в 14:01)
 

Проверять надо на mime-тип и расширение. Кроме того, можно дополнительно на загружаемые файлы выставлять права только на чтение

   
 
 автор: cheops   (23.07.2006 в 14:09)   письмо автору
 
   для: Владимир22   (23.07.2006 в 14:01)
 

А что известно о файлах заранее - это будут произвольные файлы или строго определённого типа, например, архивы или изображения?

   
 
 автор: Владимир22   (23.07.2006 в 14:18)   письмо автору
 
   для: cheops   (23.07.2006 в 14:09)
 

В одном случае это будут файлы MP3, в другом - изображения(фото). Т.е.предполагается, что пользователи будут согласно инструкуции грузить именно указанное. Но ведь доверять им нельзя, поэтому и прошу помочь с кодом. Для "BobiKK " - я и сам знаю что надо проверять на мим-типы (у меня есть и все типы мим-фалов), но
КАК ЭТА ПРОВЕРКА ВЫГЛЯДИТ В КОДЕ и какие лучше права выставлять на файлы, как это всё может выглядеть хотя бы примерно.

   
 
 автор: cheops   (23.07.2006 в 14:28)   письмо автору
 
   для: Владимир22   (23.07.2006 в 14:18)
 

Для MP3 файла следует при загрузке проверить, равен ли его медиа-тип "audio/mpeg"
<?php
  
if($_FILES['attach']['type'] != 'audio/mpeg') exit("Это не MP3-файла");
  
$ext strrchr($_FILES['attach']['name'], "."); 
  if(!
preg_match("|^\.mp3$|i"$ext)) exit("Это не MP3-файла");
?>

Тоже самое и с jpeg-файлами.

   
 
 автор: BobiKK   (23.07.2006 в 14:30)   письмо автору
 
   для: Владимир22   (23.07.2006 в 14:18)
 

$_FILES['userfile']['type']
Mime-тип файла, в случае, если браузер предоставил такую информацию. Пример: "image/gif" (c) php.net


$allowed_files = array("image/gif", "image/png", "iamge/jpeg");
...
if (!in_array($_FILES['userfile']['type'], $allowed_files) die("Недопустимый формат файла");

   
 
 автор: Владимир22   (23.07.2006 в 15:03)   письмо автору
 
   для: BobiKK   (23.07.2006 в 14:30)
 

Сheops и BobiKK! Спасибо огромное! Теперь буду знать...

Но ещё возник вопрос.
У меня, напрмер, файл изображения вводится в поле "foto", соответственно, переменная при обработке называется $foto. Пытаюсь подставить в этот код и загружаю нормальный jpg-файл, но он не идентифицируется и пишет "Ошибка" (или вместо "foto" ниже надо всё равно писать "userfile". Что тут не так, помогите разобраться:
Вот код:

if($_FILES['foto']['type'] != 'image/jpeg')
print"Ошибка!";


Пробовал также такую конструкцию:

if (filetype($foto) !=  'image/jpeg')
print"Ошибка!";

Всё равно при загрузке нормального jpg-файла, пишет "Ошибка" .

   
 
 автор: Владимир22   (26.07.2006 в 11:00)   письмо автору
 
   для: Владимир22   (23.07.2006 в 15:03)
 

Вопрос ещё актуален, помогите, кто может...

   
 
 автор: cheops   (26.07.2006 в 11:36)   письмо автору
 
   для: Владимир22   (23.07.2006 в 15:03)
 

А вы при загрузке фотографии выведите его тип - что там?
<?php
  
echo $_FILES['foto']['type'];
  exit();
?>

   
 
 автор: Владимир22   (26.07.2006 в 16:47)   письмо автору
 
   для: cheops   (26.07.2006 в 11:36)
 

Спасибо , cheops! Сам не додумался проверить.
Пишет на все файлы jpeg: image/pjpeg
Что за формат такой непонятный с этой буквой "p"... И какие ещё бывают варианты, чтобы наверняка опознавал и не браковал.

   
 
 автор: ЯR   (26.07.2006 в 16:49)   письмо автору
 
   для: Владимир22   (26.07.2006 в 16:47)
 

>Что за формат такой непонятный с этой буквой "p"... И какие
>ещё бывают варианты, чтобы наверняка опознавал и не
>браковал.
Из вариантов jpeg знаю ещё jpeg2000

   
 
 автор: cheops   (26.07.2006 в 21:46)   письмо автору
 
   для: Владимир22   (26.07.2006 в 16:47)
 

Лучше проверяйте равны ли первые 5 символов строки image - надёжнее получится.

   
 
 автор: Владимир22   (27.07.2006 в 00:54)   письмо автору
 
   для: cheops   (26.07.2006 в 21:46)
 

Кто подскажет, что не так? -
выводит 5 первых букв не типа изображения, а самого слова filetype.

$mf = substr(filetype($foto),0,5);
if ($mf != "image"){
print "<script language='JavaScript'>
        window.alert('$mf ----Это не изображение.');</script>";}

   
 
 автор: Unkind™   (27.07.2006 в 01:33)   письмо автору
 
   для: Владимир22   (27.07.2006 в 00:54)
 

Странно...Обычно это может быть из-за кавычек...У вас нет...Ну попробуйте

$filetype = filetype($foto);
$mf = substr($filetype, 0, 5); 
if ($mf != "image")

echo "<script language='JavaScript'>\nwindow.alert('$mf ----Это не изображение.');</script>";
}

   
 
 автор: Владимир22   (27.07.2006 в 03:07)   письмо автору
 
   для: Unkind™   (27.07.2006 в 01:33)
 

Не хочет всё равно. Самое интересное, что эхом показывает 4 символа (file), а первый - $ - не отображает.

   
 
 автор: hell_riser   (27.07.2006 в 20:39)   письмо автору
 
   для: Владимир22   (27.07.2006 в 03:07)
 

string filetype ( string filename )

Возвращает тип файла. Возможными значениями являются fifo, char, dir, block, link, file и unknown.

Вот так должно работать:

<?php
$file 
$_FILES['foto']['type'];
$file_type substr($file05);
if(
$file_type != "image")
   exit(
"Не допустимый тип файла !"):
?>

   
 
 автор: Владимир22   (27.07.2006 в 23:22)   письмо автору
 
   для: hell_riser   (27.07.2006 в 20:39)
 

Да, так работает. Спасибо, hell_riser!

   
Rambler's Top100
вверх

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