XSS (межсайтовый скриптинг)

Cтатья "Обеспечение безопасности веб-сайтов" предоставлена Sophos Plc и SophosLabs.

Декабрь 2007 г.

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

Многие сайты хранят имена всех посетителей в базе данных, чтобы иметь возможность отображать их при вводе соответствующих пользователей. Злоумышленник может создать подложную учетную запись, разместив при этом в поле имени вредоносный код. Подобные атаки обычно реализуются с помощью вредоносных скриптов на языке Javascript, которые затем загружают контент с другого веб-сайта. Предполагается, что в базе данных хранится имя пользователя, но на самом деле в данном случае это будет вредоносный код. Соответственно, если веб-сайт отображает имя пользователя в верхней части страницы, то этот код будет выполнен. Поскольку при наличии определенных условий такой код может делать практически все, что угодно, угроза становится вполне реальной. Тем не менее, разработчики зачастую про нее забывают. За последнее время жертвами XSS-атак стали многие популярные веб-сайты, в том числе MySpace, Facebook*, Google, Mail, ВКонтакте.

Примечание.

Рассмотрим следующий PHP-код:

$firstname = $_POST["firstname"]; echo "Your name: $firstname";

После ввода имени в веб-форме сайт отображает на странице соответствующее сообщение. Если указать в форме имя «Chris», то сообщение будет иметь следующий вид: «Your name: Chris».

Что произойдет, если вместо имени ввести следующую конструкцию: «<script>alert („You just got hacked!“) ;</script>»?

К сожалению, XSS-атакам зачастую трудно что-либо противопоставить, поскольку для этого необходимо должным образом фильтровать вводимые и выводимые данные, а также все поля, которые могут меняться пользователями. Сюда относятся данные, получаемые из запросов GET и POST, а также запросы, возвращаемые из базы данных.

В PHP имеется целый ряд пакетов, которые помогают фильтровать выводимые данные, например, CodeIgniter [15] Также в PHP имеется встроенная функция htmlspecialchars, которую можно использовать для фильтрации выводимых данных.

К следующему разделу