Перейти к содержимому



Проверка расширения файла регуляркой

#1 Kuchuluk
Kuchuluk
  • Неактивные
  • 333 сообщений
  • Репутация: 5
0

Отправлено 19 марта 2013 - 19:51

сделал код для проверки расширения файла
$file_name = "dreamweaver...exe";
$a = preg_match_all("#\.#",$file_name,$karman);
var_dump($karman);
if (count($karman[0]) != 1)
{
echo "Расширение файла задано не правильно";
}
else
{
$rashirenie = preg_match("#.+?\.([a-z]+)#",$file_name,$karman);
var_dump($karman);
$a = $karman[1];
switch ($a)
{
  case "exe" : $vivod = "Исполняемый файл. Расширение exe"; break;
  case "doc" : $vivod = "Вордовский документ. Расширение doc"; break;
  case "txt" : $vivod = "Текстовый файл. Расширение txt"; break;
  case "jpg" : $vivod = "Точечный рисунок. Расширение jpg"; break;
  case "jpeg" : $vivod = "Точечный рисунок. Расширение jpeg"; break;
  case "gif" : $vivod = "Точечный рисунок. Расширение gif"; break;
}
echo "<br>".$vivod."<br><br>";
}
первое условие проверяет - если в файле больше одной точки, то файл не допускается, это для того чтобы пользователи не могли закачать на сервер файл с двойным расширением. Но ведь в названии файла могут использоваться точки, но но этот код получается не допустит такой файл. Не могу никак придумать так, чтобы скрипт проверял наличие точки именно перед расширением, а не во всем имени файла. Может кто делал что-нибудь подобное, подскажите пожалуйста.

 

 

  • 0

#2 yury
yury
  • Пользователь
  • 648 сообщений
  • Репутация: 195

Отправлено 19 марта 2013 - 20:22

Kuchuluk, используйте, например, такую функцию
function get_file_extension($fname) {
  return pathinfo($fname, PATHINFO_EXTENSION);
}
Она работает с неограниченным количеством точек в имени файла.
И не морочьте себе голову регулярками, это не тот случай.

Но если очень хочется, то вот функция с регэкспом
function get_file_extension($fname) {
  return preg_replace("/.*?./", '', $fname);
}

  • 0

#3 Kuchuluk
Kuchuluk
    Topic Starter
  • Неактивные
  • 333 сообщений
  • Репутация: 5

Отправлено 19 марта 2013 - 20:56

спасибо. еще можно уточнить - эта функция не уязвима для хакеров? если пользователь попытается загрузить исполняемый файл, но в конце припишет расширение например jpg?


  • 0

#4 yury
yury
  • Пользователь
  • 648 сообщений
  • Репутация: 195

Отправлено 19 марта 2013 - 21:02

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


  • 0

#5 Kuchuluk
Kuchuluk
    Topic Starter
  • Неактивные
  • 333 сообщений
  • Репутация: 5

Отправлено 19 марта 2013 - 21:09

yury, мне не хочется использовать именно регулярку, хочется, чтобы защита надежная была


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

а есть функция, которая проверяет сам тип файла?
  • 0

#6 yury
yury
  • Пользователь
  • 648 сообщений
  • Репутация: 195

Отправлено 19 марта 2013 - 21:10

Существует много вариантов контроля. И проверять надо, естественно, не имя файла, а содержимое. Хотя файлы с расширением php — можно и нужно отсекать сразу.
Вот, например, статья на эту тему: Безопасная загрузка изображений


  • 1

#7 Kuchuluk
Kuchuluk
    Topic Starter
  • Неактивные
  • 333 сообщений
  • Репутация: 5

Отправлено 19 марта 2013 - 21:19

yury, спасибо огромное! очень хорошая статья!
  • 0



Похожие темы
  Название темы Автор Статистика Последнее сообщение

Пользователь месяца
Megoydagi Megoydagi 1-й за Август
Очков активности: 30 4 темы, 8 сообщений, 1 балл репутации
Сайт: bank.net.ru
ТОП самых активных за этот месяц
  • Фотография Vmir
    #1

    Vmir
    Очков активности: 22.5 3 темы, 6 сообщений, 1 балл репутации

  • Фотография BLIK
    #2

    BLIK
    Очков активности: 18 Вне конкурса за определение пользователя месяца

  • Фотография kuztoday
    #3

    kuztoday
    Очков активности: 10.5 1 тема, 4 сообщения, 1 балл репутации

  • Фотография SergiuS85
    #4

    SergiuS85
    Очков активности: 10.5 2 темы, 1 сообщение, 1 балл репутации

  • Фотография kolver
    #5

    kolver
    Очков активности: 9 1 тема, 3 сообщения, 1 балл репутации

  • Фотография mkreine
    #6

    mkreine (analiz-krovi.net)
    Очков активности: 9 1 тема, 3 сообщения, 1 балл репутации

  • Фотография Megoydagi
    #7

    Megoydagi (bank.net.ru)
    Очков активности: 9 Вне конкурса за определение пользователя месяца

  • Фотография Totti
    #8

    Totti
    Очков активности: 7.5 0 тем, 5 сообщений, 1 балл репутации

  • Фотография wp01
    #9

    wp01
    Очков активности: 6 0 тем, 4 сообщения, 1 балл репутации

  • Фотография r0mZet
    #10

    r0mZet (rz-style.ru)
    Очков активности: 6 1 тема, 1 сообщение, 1 балл репутации

  • Показать весь ТОП 10

Поддержите форум! =)
Топ 5 участников по репутации

Оформление форума – IPBSkins.ru