WelcomePartners

Межсайтовый скриптинг, как защитить сайт от XSS атаки

Использование заголовков безопасности является важным звеном в защите сайта и его посетителей от хакерских атак. В прошлой статье про HTTP-авторизацию из рубрики по защите и безопасности я обещал регулярно публиковать записи на эту тему. Сегодня я расскажу про защиту от XSS атаки.

XSS

Что такое XSS-атака

Межсайтовый скриптинг (Cross Site Scripting) — это уязвимость, которая позволяет злоумышленнику внедрить вредоносный код (обычно HTML или JavaScript) в содержимое сайта. Вредоносный код выполняется в браузере пользователя, который просматривает зараженную страницу сайта.

Это позволяет злоумышленнику получить конфиденциальную информацию.

Злоумышленники могут эксплуатировать различные уязвимости. Наибольшее распространение получили два типа атаки:

  • Отраженная (Reflected XSS) — самый распространенный непостоянный тип атаки, требующий выполнения определенного действия со стороны пользователя.
  • Хранимая (Persistent XSS) — постоянный тип атаки с внедрением вредоносного кода на сервер, не требует вмешательства пользователя.

Отраженная XSS-атака

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

Reflected XSS

  1. Злоумышленник внедряет в гиперссылку вредоносный скрипт, позволяющий просматривать cookies пользовательской сессии, и отправляет жертве по электронной почте или другим средствам коммуникации.
  2. При переходе по ссылке пользователь становится захваченным.
  3. Скрипт выполняется в браузере пользователя.
  4. Браузер отправляет cookies злоумышленнику, обеспечивая доступ к личным данным пользователя.

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

Хранимая XSS-атака

Для успешного выполнения хранимой атаки злоумышленнику достаточно найти уязвимость на сайте и разместить на своем сервере вредоносный скрипт. Затем на сайте размещается тег <script>, который загружает скрипт с вредоносным кодом с внешнего сайта , например, в комментариях. При загрузке зараженной страницы вредоносный скрипт каждый раз передается в браузер пользователя.

  1. Злоумышленник обнаруживает сайт с XSS уязвимостью и выполняет инъекцию вредоносного скрипта, который крадет cookies пользователя.
  2. При каждом посещении сайта вредоносный скрипт активируется без выполнения каких либо действий.
  3. Сессионные куки из браузера посетителя отправляются злоумышленнику.

Stored XSS

Включение заголовка X-XSS-Protection

Заголовок X-XSS-Protection предназначен для включения фильтра межсайтового скриптинга, встроенного во всех современных браузерах. Он позволит, например, предотвратить выполнение тега <script> в URL страницы.

Значение Описание
0 Фильтрация XSS отключена
1 Фильтрация XSS включена, браузер очистит страницу от опасного содержимого при обнаружении атаки
1; mode=block Фильтрация XSS включена, браузер предотвратит загрузку страницы при обнаружении атаки
1; report=URL Фильтрация XSS включена, браузер очистит страницу от опасного содержимого при обнаружении атаки и отправит отчет

Директива report для отправки отчетов действует аналогично директиве report-uri (или report-to) Content Security Policy (CSP), указывая браузеру пользователя сообщать о попытках нарушения политики безопасности контента. Об этом я расскажу в отдельной статье.

Отчет о нарушениях формируется в формате JSON и отправляется POST-запросами по указанному адресу URL.

Возвращаясь к основной теме, рекомендую настроить сервер таким образом, чтобы HTTP заголовок включал фильтрацию и при XSS-атаке блокировал загрузку страницы с небезопасным содержимым. В файле дополнительной конфигурации .htaccess (или httpd.conf, если у Вас есть полный доступ к серверу) веб-сервера Apache необходимо добавить следующую запись:

1
2
3
<ifModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
</IfModule>

Для сервера Nginx дополните файл nginx.conf в разделе HTTP записью:

1
add_header X-XSS-Protection "1; mode=block";

В том случае, если доступ к конфигурационным файлам сервера отсутствует, но есть поддержка PHP, тогда используйте функцию:

1
<?php header("X-XSS-Protection: 1; mode=block"); ?>

Cross Site Scripting, также известный как XSS, — это один из способов внедрения вредоносного кода, который исполняется на стороне клиента. Пользователь может заметить что-то неладное, например, необычное поведение страницы, иногда атака совершается абсолютно не заметно в фоновом режиме.

Безопасность сайта

Надеюсь, теперь Вы стали немного больше понимать в HTTP-заголовках сервера и X-XSS поможет предотвратить межсайтовый скриптинг. Я использую заголовки безопасности на всех своих сайтах и настоятельно рекомендую Вам сделать тоже самое. Вместе мы можем сделать интернет более безопасным! 😉

  1. Александр

    Надо и свой сайт защитить 🙂

    Ответить

  2. Марго

    Добрый день! А антивирусы не помогут?

    Ответить

  3. Webliberty

    Марго, антивирусы даже со встроенным межсетевым экраном в данном случае зачастую бесполезны. Они выявляют и блокируют другие угрозы, если только проактивная защита сможет выявить подозрительную активность.

    Ответить

  4. Руслан

    Защита своего сайта не маловажный фактор. Надо вашими рекомендациями воспользоваться, спасибо!

    Ответить

  5. Мария Крупнова

    Ну вот! а я так надеялась на антивирус! думала, что это спасение от всех бед!

    Ответить

:) ;) :D :( :cry: :| :o :P 8-) :oops: :roll: :idea:

Отправляя комментарий, Вы соглашаетесь с Политикой конфиденциальности.