И снова об уязвимости $_SERVER[‘HTTP_HOST’]

в 20:35, , рубрики: php, уязвимости php, метки:

На Хабре уже упоминали об одной известной уязвимости, связанной с переменной $_SERVER['HTTP_HOST']. Только почему-то говорилось об SQL-инъекциях и о чем угодно, кроме XSS.

Возможности комментировать исходную статью у меня нет, поэтому в двух строках уточню. Допустим, у вас на сайте есть ссылки с абсолютным адресом, вида:

<script type="text/javascript" src="<?=$_SERVER['HTTP_HOST']  ?>/my.js"></script>

Допустим, адрес вашего сайта "www.user.com". Допустим, адрес моего сайта "www.hacker.com". Все, что мне нужно сделать, — это скинуть вам ссылку на специальную страницу моего сайта, откуда я сделаю самый обычный редирект на ваш же собственный сайт. Только для редиректа использую немного необычные заголовки. В качестве HTTP-target я укажу ваш собственный сайт "www.user.com", а вот в качестве хоста — мой "www.hacker.com". Хотя, в принципе, в абсолютной форме HTTP-target нет ничего необычного.

Заголовки примут вид:

GET http://www.user.com HTTP/1.1
Host:www.hacker.com

И ваш скрипт вместо SERVER['HTTP_HOST'] подставит мой хост. Ваша ссылка src="<?=$_SERVER['HTTP_HOST'] ?>/my.js" примет вид не как вы ожидали "www.user.com/my.js", а "www.hacker.com/my.js". В результате чего с моего сайта ваш браузер с чистой совестью скачает скрипт и выполнит его.

А я получу ваши cookie.

Вы навскидку скажете, что у вас нет абсолютных ссылок? Ну, во-первых, как минимум TinyMCE по умолчанию использует абсолютные ссылки. Кроме того, не обязательно это должна быть ссылка на *.js Ссылка на css тоже годится. Ну, или в крайнем случае, на iframe.

Поэтому, как обычно, никогда на доверяйте данным, пришедшим от клиента.

Автор: DamonEs

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js