На Хабре уже упоминали об одной известной уязвимости, связанной с переменной $_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