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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: как позволить загрузку только zip-файлов?

Сообщения:  [1-10]    [11-20]  [21-26] 

 
 автор: Саня   (01.06.2010 в 20:42)   письмо автору
 
   для: Trianon   (01.06.2010 в 20:34)
 

Я говорю лишь о том, что встречается сплошь и рядом. Распространено заблуждение, что элементы в массиве $_SERVER назначены сервером и поэтому им можно беспрекословно верить. Хорошо хоть понимают, что элементам $_SERVER['HTTP_*'] точно нельзя верить. И то не всегда. Например в случае HTTP_X_RORWARDED_FOR — пихают в базу как есть, не думая о том, что там может быть совсем не IP-адрес. Чего уж скрывать — я и сам когда-то писал PHP_SELF в формах. Сейчас я её вообще нигде не использую.

  Ответить  
 
 автор: Trianon   (01.06.2010 в 20:34)   письмо автору
 
   для: Саня   (01.06.2010 в 17:19)
 

>Взять даже такую безобидную на первый взгляд переменную $_SERVER['PHP_SELF'].
>А она всё-таки зависит от пользовательских данных.
>И поэтому всякие скрипты вроде <form action="<?=$_SERVER['PHP_SELF']?>"> определённо подвержены атаке типа XSS.

Но простите, здесь же просто ошибка обработки потока данных?
если написать <form action="<?=htmlspecialchars($_SERVER['PHP_SELF']) ?>"> , Вы ведь уберете свое утверждение?
Входная переменная осталась та же, зависимость от пользовательских данных - прямейшая. XSS - нету.

  Ответить  
 
 автор: kb_nn   (01.06.2010 в 17:31)   письмо автору
 
   для: Саня   (01.06.2010 в 17:19)
 

хм. да. сколько узнал я нового за сегодня. про $_SERVER['PHP_SELF'] я такого не знал.
я просто всегда думал, что $_FILES получаю от сервера.
а заповедь такая мне прекрасно известна.

  Ответить  
 
 автор: Саня   (01.06.2010 в 17:19)   письмо автору
 
   для: kb_nn   (01.06.2010 в 16:56)
 

А то. Первая запоедь программиста гласит: "Не доверяй данным, пришедшим от пользователя". Из-за этого упущения многие системы взламывают. Взять даже такую безобидную на первый взгляд переменную $_SERVER['PHP_SELF']. А она всё-таки зависит от пользовательских данных. И поэтому всякие скрипты вроде <form action="<?=$_SERVER['PHP_SELF']?>"> определённо подвержены атаке типа XSS.

  Ответить  
 
 автор: kb_nn   (01.06.2010 в 16:56)   письмо автору
 
   для: Саня   (01.06.2010 в 16:35)
 

это накладывает требования на сервер., вот в чем минус.
хотя похоже это стоит того.
но никогда не думал, что проверка ['type'] сродни проверки по расширению

  Ответить  
 
 автор: buldovsky   (01.06.2010 в 16:44)   письмо автору
 
   для: kb_nn   (01.06.2010 в 16:21)
 

100% гарантии никто не даст. Даже генетическая экспертиза дает 99.9% вероятность прямого родства)))

Обычно тип файла указывается в первых байтах. До появления специальных функций типа finfo_file приходилось либо читать и сверять эти байты, либо смотреть заголовки которые возвращаются при GET запросе к url. С изображениями дело чуть проще, по результатам выполнения некоторых функций можно косвенно судить о том это картинка, например.

Определить тип файла

  Ответить  
 
 автор: Саня   (01.06.2010 в 16:43)   письмо автору
 
   для: kb_nn   (01.06.2010 в 15:49)
 

Значит надо подсмотреть какая сигнатура используется в том, другом, типе файла и дописать скрипт соответствующей проверкой.

  Ответить  
 
 автор: Саня   (01.06.2010 в 16:35)   письмо автору
 
   для: kb_nn   (01.06.2010 в 16:21)
 

['type'] приходит со стороны браузера. Другими словами, я могу написать скрипт, который отправит картинку jpg, но в ['type'] подставит text/html. Нельзя доверять данным, пришедшим от пользователя.

Тип всегда нужно проверять на сервере. Функция mime_content_type() использует файл magic.mime. В этом файле описаны сигнатуры форматов. Сигнатуры основаны на том предположении, что некоторый формат содержит в себе определённую неизменную последовательность байтов в начале файла (но не обязательно в начале). Поэтому с большой долей вероятности, файл, содержащий определённую сигнатуру, имеет mime-тип, привязанный к этой сигнатуре.

finfo_file() использует более продвинутую систему определения типа на основе структуры файла соответственно его спецификации.

  Ответить  
 
 автор: kb_nn   (01.06.2010 в 16:21)   письмо автору
 
   для: buldovsky   (01.06.2010 в 16:04)
 

а тогда как реально 100%-но определять любой тип файла?
я всегда полагался на ['type'] и никогда не видел, чтобы это делали по другому.

  Ответить  
 
 автор: Trianon   (01.06.2010 в 16:06)   письмо автору
 
   для: kb_nn   (01.06.2010 в 15:52)
 

не определяет.
заявляет.

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-26] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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