![]() |
+7 (495) 229-0436 | ![]() |
shopadmin@itshop.ru | 119334, г. Москва, ул. Бардина, д. 4, корп. 3 | ![]() |
![]() |
![]() |
|
|
Об одной малоизвестной уязвимости в веб сайтах15.02.2013 13:36
rotor
Первое правило безопасности при разработке Веб приложений гласит: - Не доверять данным пришедшим от клиента.Почти все это правило хорошо знают и соблюдают. Мы пропускаем через валидаторы данные форм, кукисы, даже URI. Но недавно я с удивлением обнаружил, что есть одна переменная, приходящая от клиента, которую почти никто не фильтрует. Речь пойдет о компрометации веб приложения через подмену значения HTTP_HOST и SERVER_NAME .Если выполнить поиск по Гитхабу, по ключевому слову "HTTP_HOST", то можно найти порядка 43 страниц репозиториев, в которых используется Опишу ситуацию для связки Nginx+php (php-fpm либо fcgi-spawn), для других веб-серверов или другого языка программирования ситуация будет отличаться в деталях, но общие принципы сохраняются.
Способы компрометацииДля иллюстрации, будем использовать telnet Заголовки, которые отправляет браузер серверу выглядят примерно так:
Если из них убрать строку (передача запроса без HTTP_HOST ) то сервер вернет
Другой способ отправки заголовков:
Результат будет точно такой же, как и при отправке первого заголовка
Но вот, если первым заголовком передать не а То все последующие заголовки будут отброшены, Nginx отработает секцию server определенную для Но HTTP_HOST и SERVER_NAME не будут определены.Передать пустой HTTP_HOST не получится: Но получится передать или
Теперь самое интересное. Подключаемся к телнету
Оправляем
И смотрим:
Ответ сервера:
Если в заголовке Host: будет присутствовать '/' , то сервер вернет 400 Bad Request .Т.е. такой заголовок Host:../../ не пройдет, такой Host:http://evil.site тожеУязвимостиПолучение доступа к приватным данным SQL-инъекции Способы защитыСамый простой и доступный способ защиты (нашел тут:stackoverflow.com/questions/1459739/php-serverhttp-host-vs-serverserver-name-am-i-understanding-the-ma).
Самый эффективный способ защиты - явно определить HTTP_HOST на стороне веб сервера.Что бы понять, как переопределять HTTP_HOST добавим в конфиг Nginx'а такие строки:
Допустим у нас определены две секции server :
Сделаем такой запрос
На выходе получим
Все логично. И наиболее корректной будет запись:
Если сделать запрос вида
то отработает секция
которая легко отсеет такой запрос. Ссылки по теме |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
О нас |
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.
На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям. Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе. В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.
|
119334, г. Москва, ул. Бардина, д. 4, корп. 3 +7 (495) 229-0436 shopadmin@itshop.ru |
|
© ООО "Interface Ltd." Продаем программное обеспечение с 1990 года |