|
|
|
|
|
для: Trianon
(01.06.2010 в 20:34)
| | Я говорю лишь о том, что встречается сплошь и рядом. Распространено заблуждение, что элементы в массиве $_SERVER назначены сервером и поэтому им можно беспрекословно верить. Хорошо хоть понимают, что элементам $_SERVER['HTTP_*'] точно нельзя верить. И то не всегда. Например в случае HTTP_X_RORWARDED_FOR — пихают в базу как есть, не думая о том, что там может быть совсем не IP-адрес. Чего уж скрывать — я и сам когда-то писал PHP_SELF в формах. Сейчас я её вообще нигде не использую. | |
|
|
|
|
|
|
|
для: Саня
(01.06.2010 в 17:19)
| | >Взять даже такую безобидную на первый взгляд переменную $_SERVER['PHP_SELF'].
>А она всё-таки зависит от пользовательских данных.
>И поэтому всякие скрипты вроде <form action="<?=$_SERVER['PHP_SELF']?>"> определённо подвержены атаке типа XSS.
Но простите, здесь же просто ошибка обработки потока данных?
если написать <form action="<?=htmlspecialchars($_SERVER['PHP_SELF']) ?>"> , Вы ведь уберете свое утверждение?
Входная переменная осталась та же, зависимость от пользовательских данных - прямейшая. XSS - нету. | |
|
|
|
|
|
|
|
для: Саня
(01.06.2010 в 17:19)
| | хм. да. сколько узнал я нового за сегодня. про $_SERVER['PHP_SELF'] я такого не знал.
я просто всегда думал, что $_FILES получаю от сервера.
а заповедь такая мне прекрасно известна. | |
|
|
|
|
|
|
|
для: kb_nn
(01.06.2010 в 16:56)
| | А то. Первая запоедь программиста гласит: "Не доверяй данным, пришедшим от пользователя". Из-за этого упущения многие системы взламывают. Взять даже такую безобидную на первый взгляд переменную $_SERVER['PHP_SELF']. А она всё-таки зависит от пользовательских данных. И поэтому всякие скрипты вроде <form action="<?=$_SERVER['PHP_SELF']?>"> определённо подвержены атаке типа XSS. | |
|
|
|
|
|
|
|
для: Саня
(01.06.2010 в 16:35)
| | это накладывает требования на сервер., вот в чем минус.
хотя похоже это стоит того.
но никогда не думал, что проверка ['type'] сродни проверки по расширению | |
|
|
|
|
|
|
|
для: kb_nn
(01.06.2010 в 16:21)
| | 100% гарантии никто не даст. Даже генетическая экспертиза дает 99.9% вероятность прямого родства)))
Обычно тип файла указывается в первых байтах. До появления специальных функций типа finfo_file приходилось либо читать и сверять эти байты, либо смотреть заголовки которые возвращаются при GET запросе к url. С изображениями дело чуть проще, по результатам выполнения некоторых функций можно косвенно судить о том это картинка, например.
Определить тип файла | |
|
|
|
|
|
|
|
для: kb_nn
(01.06.2010 в 15:49)
| | Значит надо подсмотреть какая сигнатура используется в том, другом, типе файла и дописать скрипт соответствующей проверкой. | |
|
|
|
|
|
|
|
для: kb_nn
(01.06.2010 в 16:21)
| | ['type'] приходит со стороны браузера. Другими словами, я могу написать скрипт, который отправит картинку jpg, но в ['type'] подставит text/html. Нельзя доверять данным, пришедшим от пользователя.
Тип всегда нужно проверять на сервере. Функция mime_content_type() использует файл magic.mime. В этом файле описаны сигнатуры форматов. Сигнатуры основаны на том предположении, что некоторый формат содержит в себе определённую неизменную последовательность байтов в начале файла (но не обязательно в начале). Поэтому с большой долей вероятности, файл, содержащий определённую сигнатуру, имеет mime-тип, привязанный к этой сигнатуре.
finfo_file() использует более продвинутую систему определения типа на основе структуры файла соответственно его спецификации. | |
|
|
|
|
|
|
|
для: buldovsky
(01.06.2010 в 16:04)
| | а тогда как реально 100%-но определять любой тип файла?
я всегда полагался на ['type'] и никогда не видел, чтобы это делали по другому. | |
|
|
|
|
|
|
|
для: kb_nn
(01.06.2010 в 15:52)
| | не определяет.
заявляет. | |
|
|
|
|