ГлавнаяФорумыЧАТСкрипты/PHP/MySQL/CSS/HTML

Способы защиты от XSS

Vmeksi[16] (Off)
[11.07.13, 7:58]
Межсайтовый скриптинг (Cross site scripting, XSS) — встраивание нежелательного кода в html-код страниц сайта. XSS можно условно разделить на пассивную и активную формы, которые мы рассмотрим ниже.
Пассивый XSS
Пассивный XSS основан на том, что GET-параметры в ряде случаев становятся частью текста страницы. Например, мыимеем скрипт поиска search.php, содержащий следующий код:
// начало скрипта
echo '
Вы искали: ' . $_GET['query'] . ' ';
// продолжение скрипта, отображение результатов поиска и.т.д
?>
Мы видим, что страница содержит заданный поисковойзапрос. Если злоумышленник обратимся к скрипту следующим образом: search.php?query= mywebsite тона странице результатов поиска будет присутствовать ссылка на example.com. Затем злоумышленник сообщит адрес такой страницы результатов поисковым системам, и они будут считать, что ваш сайт ссылкается на expample.comна одной из своихстраниц. Приведеный пример используется недобросовестными поисковыми оптимизаторами для внешних ссылок на свой сайт. В данном случае никакоговзлома не происходит.
Пассивный XSS можно использовать и для встраивания javascript-сценариев, похищающих номера сессии, использующиеся для авторизации. Ограниченности пассивного XSS в том, что требуется передать пользователю URL, содержащий специально сформированные GET-параметры. URL часто присылается пользователю в спам-письме, или же пользователь перенаправляется на данный URL с сайта, контролируемого злоумышленником.
Активный XSS
Активный XSS работает на Web 2.0 сайтах, то есть на сайтах, содержимое которых создают сами пользователи. Нежелательные скрипты помещаются в сообщения на форумах, профиль пользователя или в личные сообщения. Например, в 2008 году на hаbгаhabr.ru получило хождение личное сообщение, которое содержало скрипт, отправляющий данное сообщение друзьям пользователя от его имени.
Вредоносный javascript-сценарий обычно передает злоумышленнику номер сессиипользователя и информацию из его cookie,которая позволяет получить контроль над аккаунтом пользователя.
Другие виды XSS
Среди других видов XSS можно отметить подмену кодировки вформируемом документе. Это возможно при двух условиях:
1. пользовательская информация попадаетв тег <title> в нефильтрованном виде (часто это ник пользователя или его имя настранице профиля)
2. тег title находится в документе до тегов meta, определяющих кодировку
Более подробно можно прочитать про виды XSS в Википедии.
Требования к обработке внешних параметров
Чтобы не допустить межсайтовый скриптинг, следует внимательно фильтровать все данные, предоставляемые пользователем. Сформулируем ряд рекомендаций:
* Никогда не включайте параметры $_GET,$_POST, $_COOKIE напрямую в выдаваемый HTML. Если это текст, имеет смысл обработать его с помощью htmlspecialchars(), если атрибут alt для рисунка, то addslashes(), если url — urlencode(). Если пользователю разрешеноиспользовать некоторые теги, протестируйте все варианты использования, чтобы в невозможности встраивания скриптов и вредоносного кода.
* Пользовательские данные — это не только параметры $_GET,$_POST, $_COOKIE. Информация в базе данных, а также информация, полученная в результате обработки сторонних сайтов также можетбыть сформирована пользователем.
* Не допускайте возможности загрузки произвольных файлов на сервер. Пользователь в таком случае сможет загрузить вредоносныескрипты и HTML-страницы. Загруженные пользователем файлы следует хранить в базе данных, а не в файловой системе, и перед отдачей пользователю проверять, что файл не будет исполняться браузером (Content-Type не должен соответствовать html, xml, и др.)
* Чем шире функциональные возможности сайта, тем больше возможностей XSS следует рассмотреть в целях обеспечения безопасности сайта.
Jack[144] (Off)
[11.07.13, 11:51]
копипаст
Nowak[171] (Off)
[04.12.13, 23:21]
Мда, я и не думал что это возможно...
Последние ответы