Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 32

Безопасная загрузка с нужным форматом

03.12.2012, 13:15. Показов 3620. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На _http://php.net/manual/ru/features.file-upload.php есть скрипт загрузки изображений,выложенный одним из пользователй.

Скрипт следующий:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<?php
   // begin Dave B's Q&D file upload security code
  $allowedExtensions = array("txt","csv","htm","html","xml",
    "css","doc","xls","rtf","ppt","pdf","swf","flv","avi",
    "wmv","mov","jpg","jpeg","gif","png");
  foreach ($_FILES as $file) {
    if ($file['tmp_name'] > '') {
      if (!in_array(end(explode(".",
            strtolower($file['name']))),
            $allowedExtensions)) {
       die($file['name'].' is an invalid file type!<br/>'.
        '<a href="javascript:history.go(-1);">'.
        '&lt;&lt Go Back</a>');
      }
    }
  }
  // end Dave B's Q&D file upload security code
?>
Подскажите какую форму(html) использовать?
Попробывал,но чтото не поулчается:
HTML5
1
2
3
4
<form action="1.php" method="post" enctype="multipart/form-data">
      <input type="file" name="photos">
      <input type="submit" value="Загрузить"><br>
      </form>
Также прошу написать коментарий,что знал, то подписал.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<?php
   // begin Dave B's Q&D file upload security code
  $allowedExtensions = array("txt","csv","htm","html","xml", //загружать в переменную только файлы с разрешением, печесисленных в ковычках.
    "css","doc","xls","rtf","ppt","pdf","swf","flv","avi",
    "wmv","mov","jpg","jpeg","gif","png");
  foreach ($_FILES as $file) {
    if ($file['tmp_name'] > '') {
      if (!in_array(end(explode(".",
            strtolower($file['name']))),
            $allowedExtensions)) {
       die($file['name'].' is an invalid file type!<br/>'.
        '<a href="javascript:history.go(-1);">'.     //редирект назад
        '&lt;&lt Go Back</a>');
      }
    }
  }
  // end Dave B's Q&D file upload security code
?>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2012, 13:15
Ответы с готовыми решениями:

Безопасная загрузка изображений
Тема достаточно часто обсуждаемая в интернете, но готового скрипта не нашел. Сразу скажу, что основа взята отсюда...

Безопасная загрузка фото
Подскажите пожалуйста, безопасен и актуален ли данный код (загрузка фото): if(isset($_FILES)){ $path_images = 'images';//папка,...

Безопасная загрузка аватаров на сервер
Здравствуйте. Нашел код загрузки аватаров и переделал под себя не много, но есть вопрос по безопасности его использования. Кто что может...

11
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
03.12.2012, 13:42
это скрипт не загрузки а проверки расширений

Добавлено через 38 секунд
там ниже есть вот такой для загрузки
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
function uploader($num_of_uploads=1, $file_types_array=array("txt"), $max_file_size=1048576, $upload_dir=""){
  if(!is_numeric($max_file_size)){
    $max_file_size = 1048576;
  }
  if(!isset($_POST["submitted"])){
    $form = "<form action='".$PHP_SELF."' method='post' enctype='multipart/form-data'>Upload files:<br /><input type='hidden' name='submitted' value='TRUE' id='".time()."'><input type='hidden' name='MAX_FILE_SIZE' value='".$max_file_size."'>";
    for($x=0;$x<$num_of_uploads;$x++){
      $form .= "<input type='file' name='file[]'><font color='red'>*</font><br />";
    }
    $form .= "<input type='submit' value='Upload'><br /><font color='red'>*</font>Maximum file length (minus extension) is 15 characters. Anything over that will be cut to only 15 characters. Valid file type(s): ";
    for($x=0;$x<count($file_types_array);$x++){
      if($x<count($file_types_array)-1){
        $form .= $file_types_array[$x].", ";
      }else{
        $form .= $file_types_array[$x].".";
      }
    }
    $form .= "</form>";
    echo($form);
  }else{
    foreach($_FILES["file"]["error"] as $key => $value){
      if($_FILES["file"]["name"][$key]!=""){
        if($value==UPLOAD_ERR_OK){
          $origfilename = $_FILES["file"]["name"][$key];
          $filename = explode(".", $_FILES["file"]["name"][$key]);
          $filenameext = $filename[count($filename)-1];
          unset($filename[count($filename)-1]);
          $filename = implode(".", $filename);
          $filename = substr($filename, 0, 15).".".$filenameext;
          $file_ext_allow = FALSE;
          for($x=0;$x<count($file_types_array);$x++){
            if($filenameext==$file_types_array[$x]){
              $file_ext_allow = TRUE;
            }
          }
          if($file_ext_allow){
            if($_FILES["file"]["size"][$key]<$max_file_size){
              if(move_uploaded_file($_FILES["file"]["tmp_name"][$key], $upload_dir.$filename)){
                echo("File uploaded successfully. - <a href='".$upload_dir.$filename."' target='_blank'>".$filename."</a><br />");
              }else{
                echo($origfilename." was not successfully uploaded<br />");
              }
            }else{
              echo($origfilename." was too big, not uploaded<br />");
            }
          }else{
            echo($origfilename." had an invalid file extension, not uploaded<br />");
          }
        }else{
          echo($origfilename." was not successfully uploaded<br />");
        }
      }
    }
  }
}
uploader();
1
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 32
04.12.2012, 12:51  [ТС]
Тогда зададим вопрос иначе:
Подскажите, как безопасно загрузить картинку.

Тоесть например вот код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 $blacklist = array(".php", ".phtml", ".php3", ".php4");
 foreach ($blacklist as $item) {
  if(preg_match("/$item\$/i", $_FILES['userfile']['name'])) {
   echo "We do not allow uploading PHP files\n";
   exit;
   }
  }
 
  $uploaddir = 'uploads/';
  $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
 
  if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
   echo "File is valid, and was successfully uploaded.\n";
  } else {
   echo "File uploading failed.\n";
  }
?>
Тут проверяется формат,и если он есть в списке,загрузка отменяется.
Но т.к. очень много разрешений например у PHP (phtml,php3,и т.д.)

Лучше было бы так:
В списке мы указываем нужные нам разрешения,и если разрешение соответствует нужным,
загрузка происходит.
Кто может исправить,прошу помочь.

Добавлено через 21 час 48 минут
Прошу помочь.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
04.12.2012, 13:15
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
    # Допустимые расширения
    $enabled = array("jpg", "png", "gif");
    
    # Если это действительно загружаемое изображение
    if( is_uploaded_file( $_FILES['userfile']['tmp_name'] ) )
    {
        # Получаем информацию об изображении
        $info = getimagesize( $_FILES['userfile']['tmp_name'] );
        
        # Получаем тип
        $type = explode( '/', $info['mime'] );
        
        # Если тип подходит
        if( in_array( $type[1], $enabled ) )
        {
            # Директория для загрузки
            $uploaddir = 'uploads/';
            
            # Путь к создаваемому изображению
            $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
            
            if ( move_uploaded_file( $_FILES['userfile']['tmp_name'], $uploadfile ) )
                # Успешно
                echo "File is valid, and was successfully uploaded.\n";
            else
                echo 'Загрузка не удалась';
        }
        else
            echo 'Неверный тип файла';
    }
    else
        echo 'Файл не является загружаемым с компьютера пользователя';
?>
1
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
04.12.2012, 13:22
PHP
1
2
3
4
5
6
$whitelist = array("jpg", "png", "gif");
 $extension = strrchr($_FILES['userfile']['name'], '.');
 if (!in_array($extension, $whitelist)){
    echo "We do not allow uploading PHP files\n";
    exit;
 }
Добавлено через 1 минуту

Не по теме:

опоздал(

1
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 32
11.12.2012, 13:20  [ТС]
В скриатх выше имеется уязвимость.
Всё таки посоветовали использовать скрипт,который я уже писал выше:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
   // begin Dave B's Q&D file upload security code
  $allowedExtensions = array("txt","csv","htm","html","xml",
    "css","doc","xls","rtf","ppt","pdf","swf","flv","avi",
    "wmv","mov","jpg","jpeg","gif","png");
  foreach ($_FILES as $file) {
    if ($file['tmp_name'] > '') {
      if (!in_array(end(explode(".",
            strtolower($file['name']))),
            $allowedExtensions)) {
       die($file['name'].' is an invalid file type!<br/>'.
        '<a href="javascript:history.go(-1);">'.
        '&lt;&lt Go Back</a>');
      }
    }
  }
  // end Dave B's Q&D file upload security code
?>
 
<form action='../1.php' method='post' enctype='multipart/form-data'>
<input name='file[]' type='file' multiple='true' />
<input type='submit' value='Загрузить' />
</form>
Но тут после загрузки появляется ошибка,подскажите в чём проблема.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.12.2012, 13:49

Не по теме:

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



Добавлено через 3 минуты
Цитата Сообщение от Alex922 Посмотреть сообщение
PHP
1
foreach ($_FILES as $file) {
PHP
1
foreach ($_FILES['file'] as $file) {
Цитата Сообщение от Alex922 Посмотреть сообщение
PHP
1
if ($file['tmp_name'] > '') {
PHP
1
if (!empty($file['tmp_name']) && empty($file['error'])) {
1
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 32
11.12.2012, 15:38  [ТС]
Тоесть вот:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
   // begin Dave B's Q&D file upload security code
  $allowedExtensions = array("txt","csv","htm","html","xml",
    "css","doc","xls","rtf","ppt","pdf","swf","flv","avi",
    "wmv","mov","jpg","jpeg","gif","png");
foreach ($_FILES['file'] as $file) {
    if (!empty($file['tmp_name']) && empty($file['error'])) {
      if (!in_array(end(explode(".",
            strtolower($file['name']))),
            $allowedExtensions)) {
       die($file['name'].' is an invalid file type!<br/>'.
        '<a href="javascript:history.go(-1);">'.
        '&lt;&lt Go Back</a>');
      }
    }
  }
  // end Dave B's Q&D file upload security code
?>
 
<form action='../1.php' method='post' enctype='multipart/form-data'>
<input name='file[]' type='file' multiple='true' />
<input type='submit' value='Загрузить' />
</form>
Миниатюры
Безопасная загрузка с нужным форматом  
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.12.2012, 15:49
а вы выберите файл
1
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 32
11.12.2012, 16:01  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
а вы выберите файл
После выбора картинки загрузка не происходит,а просто опять вылазит окно выбора картинки(без ошибки на скрине)
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.12.2012, 19:25
Цитата Сообщение от Alex922 Посмотреть сообщение
После выбора картинки загрузка не происходит
а почему она должна происходить, потому что Вы так захотели? Вы лишь проверяете на расширение, каких либо других действий не наблюдается
1
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 32
11.12.2012, 19:50  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
а почему она должна происходить, потому что Вы так захотели? Вы лишь проверяете на расширение, каких либо других действий не наблюдается
Ух,запутался совсем
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.12.2012, 19:50
Помогаю со студенческими работами здесь

безопасная загрузка изображений на серверe
здраствуите пхписти. как я понимаю, Чтобы загрузка изображений на сервере бил более безопасним, нада сделат адин такои важни веш: -...

Безопасная загрузка файлов на сервер
Добрый день. Столкнулся вот с каким делом, на моем сайте организована загрузка файлов для блога. Исследуя некие баги, смог загрузить php...

Безопасная загрузка
Как включить uefi на ms-7293vp? BIOS нужно обновлять для этого?

Безопасная загрузка
Хочу установить OS Tails на флешку, но для этого нужно отключить безопасную загрузку. Компьютером владею не очень, поэтому боюсь отключать....

Безопасная загрузка windows
Добрый вечер, так получилось что после обновления видео драйвера ATI на ноутбуке Asus (windows 10 x64) у меня начал мегать экран и стало...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru