Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2014, 00:16   #1
MedwedoS
Пользователь
 
Аватар для MedwedoS
 
Регистрация: 24.02.2014
Сообщений: 72
По умолчанию Загрузка файлов (ограничение форматов)

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

Форма HTML
Код HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Загрузка файлов</title>
</head>
<body>
<h2><p><b> Форма для загрузки файлов </b></p></h2>
      <form action="upload.php" method="post" enctype="multipart/form-data">
      <input type="file" name="userfile"><br> 
      <input type="submit" value="Загрузить"><br>
      </form>
</body>
</html>
Загрузка файла, выдача рандомного имени и ограничение по формату.
PHP код:
<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Загрузка . . .</title> 
</head> 

<body> 
<h1>Загрузка файла  </h1> 
<?php 
if ($_FILES['userfile']['error'] > 0

echo 
'Проблема: '
switch (
$_FILES['userfile']['error']) 

case 
1: echo 'размер файла больше uoload_max_filesize' ; break; 
case 
2: echo 'размер файла больше max_file_size'; break; 
case 
3: echo 'загружена только часть файла'; break; 
case 
4: echo 'файл не загружен'; break; 

exit; 

// Проверка, имеет ли файл правильный MIME-тип 
if ($_FILES ['userfile']['type'] == 'application/zip'

    
$format '.zip';
} else {
    if (
$_FILES ['userfile']['type'] == 'application/x-rar-compressed') {
        
$format '.rar';
    } else {
        echo 
'Проблема: Разрешено загружать только ZIP(архив) и rar файлы'
        exit; 
    }
}
// Помещаем файл туда, куда нужно 
$upfile 'uplo/'.$_FILES['userfile']['name']; 
if (
$_FILES['userfile']['tmp_name']) 
{
$nename ''.substr(md5(rand(0,mt_getrandmax())),0,10).$format.'';
if (!
move_uploaded_file($_FILES['userfile']['tmp_name'], $upfile $nename)) 

echo 
'Проблема: невозможно переместить файл в каталог назначения'
exit; 


else 

echo 
'Проблема: возможна атака через загрузку файла. Файл: '
echo 
$_FILES['userfile']['name']; 
exit; 

echo 
'Файл успешно загружен. <br><br>'
// Вывод загружаемого файла 
echo '<br><hr>'
echo 
'<a href="http://мой-сайт/upl/'.$upfile.'">'.$upfile.'</a>';
?> 
</body> 
</html>
Нужно, что бы можно было загрузить только ZIP и RAR
Если только ZIP то я могу, но мне нужно что бы еще и RAR можно было, тут уже все рушится....
MedwedoS вне форума Ответить с цитированием
Старый 06.08.2014, 07:56   #2
vasiatka
Пользователь
 
Аватар для vasiatka
 
Регистрация: 18.02.2014
Сообщений: 90
По умолчанию

Распечатай, что у тебя в $_FILES ['userfile']['type'].

Там с успехом может оказаться и application/x-zip-compressed, и application/x-tar, и т.д.

Скорее всего поэтому не проходит.
В бинарной системе счет ведут не по пальцам, а по кулакам.
Пенза - мой город - я из Пензы.
vasiatka вне форума Ответить с цитированием
Старый 06.08.2014, 09:53   #3
MedwedoS
Пользователь
 
Аватар для MedwedoS
 
Регистрация: 24.02.2014
Сообщений: 72
По умолчанию

Ты однако прав!

Загружаю ZIP, получаю
Код:
application/x-zip-compressed
MedwedoS вне форума Ответить с цитированием
Старый 06.08.2014, 21:33   #4
vasiatka
Пользователь
 
Аватар для vasiatka
 
Регистрация: 18.02.2014
Сообщений: 90
По умолчанию

Цитата:
Сообщение от MedwedoS Посмотреть сообщение
Ты однако прав!

Загружаю ZIP, получаю
Код:
application/x-zip-compressed
А сравниваете с application/zip. И странно, почему не работает?...
В бинарной системе счет ведут не по пальцам, а по кулакам.
Пенза - мой город - я из Пензы.
vasiatka вне форума Ответить с цитированием
Старый 06.08.2014, 23:21   #5
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

Нужно еще проверять сами расширения файлов, т.к. MIME тип можно подделать. Вот и получится, что зальют пхп файл к вам на сервак и если он будет виден из веба, то беда, беда будит. Проверка на MIME не защитит, нужна еще проверка на расширение файла. Из личного опыта говорю.
Gorychev вне форума Ответить с цитированием
Старый 09.08.2014, 05:45   #6
MedwedoS
Пользователь
 
Аватар для MedwedoS
 
Регистрация: 24.02.2014
Сообщений: 72
По умолчанию

Цитата:
Сообщение от Gorychev Посмотреть сообщение
Нужно еще проверять сами расширения файлов, т.к. MIME тип можно подделать. Вот и получится, что зальют пхп файл к вам на сервак и если он будет виден из веба, то беда, беда будит. Проверка на MIME не защитит, нужна еще проверка на расширение файла. Из личного опыта говорю.
Подскажите как проверять по вашему методу плиз!))
Хотябы в ЛС, не скажу не кому, пожалуйста!!!
MedwedoS вне форума Ответить с цитированием
Старый 09.08.2014, 08:40   #7
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

У меня была задача пропускать к заливке только рисунки, но сути не меняет
PHP код:
// разрешенные расширения файлов
private $allowExt = array('gif''jpeg''jpg''png');
// отдает расширение файла
private function getFileExt($filename) {
        
$temp explode('.'$filename);
        return 
strtolower(end($temp));
    }
// проверка валиден ли тип и расширение
protected function isPicture($type$ext) {
        
$result false;
        switch (
$type) {
            case 
'image/jpeg':
            case 
'image/jpg':
            case 
'image/pjpeg':
            case 
'image/x-png':
            case 
'image/png':
            case 
'image/gif':
                
$result true;
                break;
        }
        if (
$result) {
            
$result in_array(strtolower($ext), $this->allowExt);
        }
        return 
$result;
    }
................
// сама проверка
$ext $this->getFileExt($files['name']);
if (
$this->isPicture($files['type'], $ext)) {
// good
} else {
// bad
}
............... 

Последний раз редактировалось Gorychev; 09.08.2014 в 08:54.
Gorychev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регистрирование пользовательских форматов файлов gil9red Win Api 2 19.08.2012 17:44
Загрузка форматов, отличных от bmp в HBitMap. Alex Cones Общие вопросы Delphi 8 29.01.2011 14:35
необходим поиск файлов форматов pdf, txt, djvu, chm, html Yokka Общие вопросы C/C++ 0 26.05.2010 03:41
Конвертирование графических форматов файлов ALEX_RAS Помощь студентам 21 02.11.2008 17:46
ищу спецификации различных форматов файлов bphoenix Свободное общение 2 14.04.2007 13:06