Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: ошибка в библеотеке загрузки [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): « 1 [2] 3 »   

> Без описания
foozzi
Отправлено: 11 Ноября, 2011 - 18:13:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




snikers987 пишет:
А где функция вызывается то?


эта функция вмещает в себя весь процесс, зачем вызывать, это же обработчик


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
snikers987
Отправлено: 11 Ноября, 2011 - 18:43:51
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




Нет, любая функция выполняется только при ее вызове, а ты ее только объявил, но не вызываешь, как она должна по твоему заработать?

(Отредактировано автором: 11 Ноября, 2011 - 19:00:13)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
OrmaJever Модератор
Отправлено: 11 Ноября, 2011 - 19:19:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




foozzi ответ был дан во втором посте, вы спросили где parce error вам ответили, а то что пустая страница дак это уже нужно http://phpfaq[dot]ru/debug (который так же был во втором посте). Пока не научитесь читать полезные статьи, которые дают, дела не будет.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
foozzi
Отправлено: 11 Ноября, 2011 - 20:43:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




OrmaJever пишет:
foozzi ответ был дан во втором посте, вы спросили где parce error вам ответили, а то что пустая страница дак это уже нужно http://phpfaq[dot]ru/debug (который так же был во втором посте). Пока не научитесь читать полезные статьи, которые дают, дела не будет.


да нет, дело было совсем в другом =) ток что осенило и переписал немного код, вот рабочая библиотека:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. error_reporting(E_ALL | E_STRICT);
  3. ini_set("display_errors", True);
  4.          $upload_dir = '/uploads/';
  5.          $upload_path = dirname (__FILE__).$upload_dir;
  6.          $upload_filename = basename($_FILES["filename"]["name"]);
  7.          $upload_link = "http://".$_SERVER["HTTP_HOST"].dirname ($_SERVER ["PHP_SELF"]).$upload_dir.$upload_filename;
  8.          $m=move_uploaded_file($_FILES['filename']['tmp_name'], /*TE_DIR.'/upload/'*/$upload_path.$upload_filename);
  9.    
  10. function upload_file($max_size=3145728)
  11. {
  12.        
  13.         global $upload_path, $upload_filename, $upload_dir, $upload_link, $m;
  14.  
  15. if ($_FILES)
  16.  {
  17.                 switch ($_FILES['filename']['type']) // Проверка типа файла
  18.       {
  19.                         case 'image/jpeg':            $ext='jpg'; break;
  20.                         case 'image/pjpeg':           $ext='jpg'; break;
  21.                         case 'image/png':                $ext='png'; break;
  22.                         case 'application/pdf':    $ext='pdf'; break;
  23.                         case 'application/x-bzip2':$ext='bz2'; break;
  24.                         case 'application/x-gzip':      $ext='gz';  break;
  25.                         case 'application/x-tar':       $ext='tar gz'; break;
  26.                         case 'application/x-troff-man':$ext='man'; break;
  27.                         case 'application/zip':    $ext='zip'; break;
  28.          case 'audio/mpeg':           $ext='mp3'; break;
  29.                
  30.                         default:                        $ext='';
  31.                 }      
  32.                
  33. if ($ext == true && $_FILES['filename']['size'] <= $max_size)
  34.    {
  35.                        
  36. if ($m)
  37.     {
  38.           echo "Файл загружен.";
  39.           echo "Линки:<br>";
  40.      echo "<input type='text' size=80 onclick='this.select()' value='".$upload_link."'><br><br>";
  41.      echo "HTML Линк:<br>";
  42.      echo "<input type='text' size=80 onclick='this.select()' value=\"<a href='".$upload_link."'>".$upload_link."</a>\"><br><br>";
  43.      echo "BB-Code Линк:<br>";
  44.      echo "<input type='text' size=80 onclick='this.select()' value='[url]".$upload_link."[/url]'><br><br>";
  45.      echo "<a href='../index.php?".md5(microtime())."'>Загрузить другой файл</a>";
  46.     }
  47.         else
  48.           {
  49.             echo "Ошибка. Возможно не хватает прав доступа.";
  50.           }
  51.     }
  52.   else
  53.       {
  54.                                 echo "Не разрешенный тип файла или слишком большой размер файла";
  55.            }
  56. /*print_r($mes);*/
  57.  }
  58. }
  59.  
  60. upload_file();
  61.  
  62. ?>  
  63.  


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
snikers987
Отправлено: 11 Ноября, 2011 - 20:51:55
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




С чего вдруг этот скрипт в одну функцию стал библиотекой или я чего не понимаю?

(Отредактировано автором: 11 Ноября, 2011 - 20:52:28)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
foozzi
Отправлено: 11 Ноября, 2011 - 20:58:50
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




snikers987 пишет:
С чего вдруг этот скрипт в одну функцию стал библиотекой или я чего не понимаю?


сорри я немного протупил =)
(по началу там было несколько функций ыы)


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
foozzi
Отправлено: 12 Ноября, 2011 - 02:16:59
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




еще одна трабла с обработчиком, тестил только что его и обнаружил что запрещенные файлы (.txt например) заливаются НО с названием после первой точки, то есть было например lalal.lala.txt залилось lalal.txt
подскажите как фиксить? вот финальный код:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. error_reporting(E_ALL | E_STRICT);
  3. ini_set("display_errors", True);
  4.          $upload_dir = 'uploads/';
  5.          $upload_path = dirname (__FILE__).$upload_dir;
  6.          $upload_filename = basename($_FILES["filename"]["name"]);
  7.          $upload_link = "http://".$_SERVER["HTTP_HOST"].dirname ($_SERVER ["PHP_SELF"]).'/'.$upload_dir.$upload_filename;
  8.          $m=move_uploaded_file($_FILES['filename']['tmp_name'], $upload_dir.$upload_filename);
  9.    
  10. function upload_file($max_size=645728)
  11. {
  12.        
  13.         global $upload_path, $upload_filename, $upload_dir, $upload_link, $m;
  14.  
  15. if ($_FILES)
  16.  {
  17.                 switch ($_FILES['filename']['type']) // Проверка типа файла
  18.       {
  19.                         case 'image/jpeg':            $ext='jpg'; break;
  20.                         case 'image/pjpeg':           $ext='jpg'; break;
  21.                         case 'image/png':                $ext='png'; break;
  22.                         case 'application/pdf':    $ext='pdf'; break;
  23.                         case 'application/x-bzip2':$ext='bz2'; break;
  24.                         case 'application/x-gzip':      $ext='gz';  break;
  25.                         case 'application/x-tar':       $ext='tar'; break;
  26.                         case 'application/x-troff-man':$ext='man'; break;
  27.                         case 'application/zip':    $ext='zip'; break;
  28.          case 'audio/mpeg':           $ext='mp3'; break;
  29.                
  30.                         default:                        $ext='';
  31.                 }      
  32.                
  33. if ($ext == true && $_FILES['filename']['size'] <= $max_size)
  34.    {
  35.                        
  36. if ($m)
  37.     {
  38.           echo "Файл загружен.";
  39.           echo "Линки:<br>";
  40.      echo "<input type='text' size=80 onclick='this.select()' value='".$upload_link."'><br><br>";
  41.      echo "HTML Линк:<br>";
  42.      echo "<input type='text' size=80 onclick='this.select()' value=\"<a href='".$upload_link."'>".$upload_link."</a>\"><br><br>";
  43.      echo "BB-Code Линк:<br>";
  44.      echo "<input type='text' size=80 onclick='this.select()' value='[url]".$upload_link."[/url]'><br><br>";
  45.      echo "<a href='?".md5(microtime())."'>Загрузить другой файл</a>";
  46.     }
  47.         else
  48.           {
  49.             /*echo "Ошибка. Возможно не хватает прав доступа.<br>";
  50.             echo "<a href='?".md5(microtime())."'>Загрузить другой файл</a>";*/
  51.             exit("Ошибка. Возможно не хватает прав доступа.");
  52.           }
  53.     }
  54.   else
  55.       {
  56.                                 /*echo "Не разрешенный тип файла или слишком большой размер файла.<br>";
  57.                                 echo "<a href='?".md5(microtime())."'>Загрузить другой файл</a>";*/
  58.                                 exit("Не разрешенный тип файла или слишком большой размер файла.");
  59.            }
  60. /*print_r($mes);*/
  61.  }
  62. }
  63.  
  64. upload_file();
  65.  
  66. ?>  


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
snikers987
Отправлено: 12 Ноября, 2011 - 11:27:54
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. function checkFileType(){
  3.     $text = '';
  4.     $ext = array('.jpeg','.jpg','.gif', '.png'); //разрешенные расширения
  5.     $fileext = strrchr(strtolower($_FILES['filename']['name']), ".");
  6.     if (!in_array($fileext, $ext)) {
  7.         $text ="Не допустимый тип файла.";
  8.            return $text;
  9.  
  10.     }
  11. return NULL;
  12. }
  13.  
  14.  


Делай проверку так, естественно оставлять это отдельной функцией не стоит..

(Отредактировано автором: 12 Ноября, 2011 - 11:33:30)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
DeepVarvar Супермодератор
Отправлено: 12 Ноября, 2011 - 12:22:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




snikers987
1) strtolower работает только с латиницей.
2) как насчет *.jpe? А mime-type один и тот же.
3) с вашей проверкой шелл обеспечен.
 
 Top
foozzi
Отправлено: 12 Ноября, 2011 - 12:38:05
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




snikers987 да там немного не то что я хотел, а если мой цикл проверки сделать функцией?


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
snikers987
Отправлено: 12 Ноября, 2011 - 12:51:34
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




DeepVarvar пишет:
snikers987
1) strtolower работает только с латиницей.


А бывают расширения на кириллице?

DeepVarvar пишет:
snikers987
2) как насчет *.jpe? А mime-type один и тот же.

PHP:
скопировать код в буфер обмена
  1. function checkFileType(){
  2.     $name = 'фаилю.jpe';
  3.         $text = '';
  4.     $ext = array('.jpeg','.jpg','.gif', '.png'); //разрешенные расширения
  5.     $fileext = strrchr(strtolower($name), ".");
  6.     if (!in_array($fileext, $ext)) {
  7.         $text ="Не допустимый тип файла.";
  8.            return $text;
  9.  
  10.     }
  11. return NULL;
  12. }
  13. echo checkFileType(); //результат Не допустимый тип файла.

Так что не надо тут=) почитай что делает strrchr()

DeepVarvar пишет:
snikers987
3) с вашей проверкой шелл обеспечен.

Дабы не быть голословным, метод обхода проверки в студию.
(Добавление)
foozzi пишет:
snikers987 да там немного не то что я хотел, а если мой цикл проверки сделать функцией?


Не вижу в вашей функции циклов.
(Добавление)
Проверять расширения ИМХО надежнее чем миме типы.

(Отредактировано автором: 12 Ноября, 2011 - 13:07:33)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
foozzi
Отправлено: 12 Ноября, 2011 - 13:07:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




snikers987 пишет:
Метод обхода проверки в студию.

пожалуйста
CODE (htmlphp):
скопировать код в буфер обмена
  1. #!/usr/bin/perl
  2.  
  3. use LWP; # we are using libwwwperl
  4.  
  5. use HTTP::Request::Common;
  6.  
  7. $ua = $ua = LWP::UserAgent->new;
  8.  
  9. $res = $ua->request(POST 'http://localhost/upload1.php',
  10.  
  11.        Content_Type => 'form-data',
  12.  
  13.        Content => [userfile => ["shell.php", "shell.php"],],);
  14.  
  15.  
  16.  
  17. print $res->as_string();
  18.  


исходник на perl использующий upload.php* для загрузки шелла
(Добавление)
вот... все работает вроде

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. error_reporting(E_ALL | E_STRICT);
  3. ini_set("display_errors", True);
  4.          $upload_dir = 'uploads/';
  5.          $upload_path = dirname (__FILE__).$upload_dir;
  6.          $upload_filename = basename($_FILES["filename"]["name"]);
  7.          $upload_link = "http://".$_SERVER["HTTP_HOST"].dirname ($_SERVER ["PHP_SELF"]).'/'.$upload_dir.$upload_filename;
  8.          $m=move_uploaded_file($_FILES['filename']['tmp_name'], $upload_dir.$upload_filename);
  9.    
  10. function check_file() {
  11. global $ext;
  12.        
  13.         if ($_FILES)
  14.  {
  15.                 switch ($_FILES['filename']['type']) // Проверка типа файла
  16.       {
  17.                         case 'image/jpeg':            $ext='jpg'; break;
  18.                         case 'image/pjpeg':           $ext='jpg'; break;
  19.                         case 'image/png':                $ext='png'; break;
  20.                         case 'application/pdf':    $ext='pdf'; break;
  21.                         case 'application/x-bzip2':$ext='bz2'; break;
  22.                         case 'application/x-gzip':      $ext='gz';  break;
  23.                         case 'application/x-tar':       $ext='tar'; break;
  24.                         case 'application/x-troff-man':$ext='man'; break;
  25.                         case 'application/zip':    $ext='zip'; break;
  26.          case 'audio/mpeg':           $ext='mp3'; break;
  27.                
  28.                         default:                        $ext='';
  29.                 }      
  30.  }
  31. }
  32. function upload_file($max_size=645728)
  33. {
  34.        
  35.         global $upload_path, $upload_filename, $upload_dir, $upload_link, $m, $ext;
  36.  
  37.  
  38.                
  39. if ($ext == true && $_FILES['filename']['size'] <= $max_size)
  40.    {
  41.                        
  42. if ($m)
  43.     {
  44.           echo "Файл загружен.";
  45.           echo "Линки:<br>";
  46.      echo "<input type='text' size=80 onclick='this.select()' value='".$upload_link."'><br><br>";
  47.      echo "HTML Линк:<br>";
  48.      echo "<input type='text' size=80 onclick='this.select()' value=\"<a href='".$upload_link."'>".$upload_link."</a>\"><br><br>";
  49.      echo "BB-Code Линк:<br>";
  50.      echo "<input type='text' size=80 onclick='this.select()' value='[url]".$upload_link."[/url]'><br><br>";
  51.      echo "<a href='?".md5(microtime())."'>Загрузить другой файл</a>";
  52.     }
  53.         else
  54.           {
  55.             /*echo "Ошибка. Возможно не хватает прав доступа.<br>";
  56.             echo "<a href='?".md5(microtime())."'>Загрузить другой файл</a>";*/
  57.             exit("Ошибка. Возможно не хватает прав доступа.");
  58.           }
  59.     }
  60.   else
  61.       {
  62.                                 /*echo "Не разрешенный тип файла или слишком большой размер файла.<br>";
  63.                                 echo "<a href='?".md5(microtime())."'>Загрузить другой файл</a>";*/
  64.                                 exit("Не разрешенный тип файла или слишком большой размер файла.");
  65.            }
  66. /*print_r($mes);*/
  67.  }
  68. /*}*/
  69. check_file();
  70. upload_file();
  71.  
  72. ?>  


фак, и этот то же заливает запрещенные файлы =(

(Отредактировано автором: 12 Ноября, 2011 - 13:26:18)



-----
90% ошибок находятся в полуметре от монитора...
 
 Top
snikers987
Отправлено: 12 Ноября, 2011 - 13:50:41
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




foozzi пишет:
snikers987 пишет:
Метод обхода проверки в студию.

пожалуйста
CODE (htmlphp):
скопировать код в буфер обмена
  1. #!/usr/bin/perl
  2.  
  3. use LWP; # we are using libwwwperl
  4.  
  5. use HTTP::Request::Common;
  6.  
  7. $ua = $ua = LWP::UserAgent->new;
  8.  
  9. $res = $ua->request(POST 'http://localhost/upload1.php',
  10.  
  11.        Content_Type => 'form-data',
  12.  
  13.        Content => [userfile => ["shell.php", "shell.php"],],);
  14.  
  15.  
  16.  
  17. print $res->as_string();
  18.  


исходник на perl использующий upload.php* для загрузки шелла


То что ты скопипастил с хабра этот перл скрипт, не значит что то что я написал пропустит фаил с расширением php и если бы ты хоть статью внимательно прочитал, то понял бы почему, я ведь не писал что это единственная необходимая проверка.

(Отредактировано автором: 12 Ноября, 2011 - 14:51:14)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
foozzi
Отправлено: 12 Ноября, 2011 - 15:09:01
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




snikers987 ну просто попросил показать скрипт, ну я нашол первый попавшийся, зачем грубить


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
snikers987
Отправлено: 12 Ноября, 2011 - 16:19:38
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




foozzi пишет:
snikers987 ну просто попросил показать скрипт, ну я нашол первый попавшийся, зачем грубить


Просто как раз именно таким скриптом эту проверку не обойти, ибо расширение php она не пропустит, даже если подменить миме тип.

И я не грубил.

(Отредактировано автором: 12 Ноября, 2011 - 16:20:26)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB