webew
Войти » Регистрация
 
PHP :: безопасность

Как защититься от межсайтового скриптинга (XSS)?

26 января 2009, 21:56
Автор: Григорий Рубцов [rgbeast]

Межсайтовый скриптинг (Cross site scripting, XSS) — встраивание нежелательного кода в html-код страниц сайта. XSS можно условно разделить на пассивную и активную формы, которые мы рассмотрим ниже.

Пассивый XSS

Пассивный XSS основан на том, что GET-параметры в ряде случаев становятся частью текста страницы. Например, мы имеем скрипт поиска search.php, содержащий следующий код:

<?php
// начало скрипта
echo '<div>Вы искали: ' . $_GET['query'] . '</div>';
// продолжение скрипта, отображение результатов поиска и.т.д
?>

Мы видим, что страница содержит заданный поисковой запрос. Если злоумышленник обратимся к скрипту следующим образом: search.php?query=<a href="http://example.com">my website</a> то на странице результатов поиска будет присутствовать ссылка на example.com. Затем злоумышленник сообщит адрес такой страницы результатов поисковым системам, и они будут считать, что ваш сайт ссылкается на expample.com на одной из своих страниц. Приведеный пример используется недобросовестными поисковыми оптимизаторами для внешних ссылок на свой сайт. В данном случае никакого взлома не происходит.

Пассивный XSS можно использовать и для встраивания javascript-сценариев, похищающих номера сессии, использующиеся для авторизации. Ограниченности пассивного XSS в том, что требуется передать пользователю URL, содержащий специально сформированные GET-параметры. URL часто присылается пользователю в спам-письме, или же пользователь перенаправляется на данный URL с сайта, контролируемого злоумышленником.

Активный XSS

Активный XSS работает на Web 2.0 сайтах, то есть на сайтах, содержимое которых создают сами пользователи. Нежелательные скрипты помещаются в сообщения на форумах, профиль пользователя или в личные сообщения. Например, в 2008 году на Хабре (habrahabr.ru) получило хождение личное сообщение, которое содержало скрипт, отправляющий данное сообщение друзьям пользователя от его имени.

Вредоносный javascript-сценарий обычно передает злоумышленнику номер сессии пользователя и информацию из его cookie, которая позволяет получить контроль над аккаунтом пользователя.

Другие виды XSS

Среди других видов XSS можно отметить подмену кодировки в формируемом документе. Это возможно при двух условиях:

  1. пользовательская информация попадает в тег <title> в нефильтрованном виде (часто это ник пользователя или его имя на странице профиля)
  2. тег title находится в документе до тегов meta, определяющих кодировку

Более подробно можно прочитать про виды XSS в Википедии.

Требования к обработке внешних параметров

Чтобы не допустить межсайтовый скриптинг, следует внимательно фильтровать все данные, предоставляемые пользователем. Сформулируем ряд рекомендаций:

Статья написана по материалам онлайн-курса «Программирование на PHP».


© Все права на данную статью принадлежат порталу webew.ru. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в печатных изданиях допускается только с разрешения редакции.
Статьи, часто просматриваемые вместе с этой:
SQL-инъекции
Как сделать иерархическое меню?
Магические кавычки в PHP
Добавить комментарий
© 2007—2010 webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100