Межсайтовый скриптинг и как защитить сайт от XSS атаки
Использование заголовков безопасности является важным звеном в защите сайта и его посетителей от хакерских атак. В прошлой статье про HTTP-авторизацию из рубрики по защите и безопасности я обещал регулярно публиковать записи на эту тему. Сегодня я расскажу про защиту от XSS атаки.
Что такое XSS-атака
Межсайтовый скриптинг (Cross Site Scripting) — это уязвимость, которая позволяет злоумышленнику внедрить вредоносный код (обычно HTML или JavaScript) в содержимое сайта. Вредоносный код выполняется в браузере пользователя, который просматривает зараженную страницу сайта.
Злоумышленники могут эксплуатировать различные уязвимости. Наибольшее распространение получили два типа атаки:
- Отражённая (Reflected XSS) — самый распространенный непостоянный тип атаки, требующий выполнения определённого действия со стороны пользователя.
- Хранимая (Persistent XSS) — постоянный тип атаки с внедрением вредоносного кода на сервер, не требует вмешательства пользователя.
Отражённая XSS-атака
Срабатывает при переходе пользователя по специально подготовленной ссылке, которая отправляет запрос на сайт с уязвимостью. Данная уязвимость обычно является результатом недостаточной фильтрации входящих запросов, что позволяет манипулировать функциями и активировать вредоносные скрипты.
- Злоумышленник внедряет в гиперссылку вредоносный скрипт, позволяющий просматривать cookies пользовательской сессии, и отправляет жертве по электронной почте или другим средствам коммуникации.
- При переходе по ссылке пользователь становится захваченным.
- Скрипт выполняется в браузере пользователя.
- Браузер отправляет cookies злоумышленнику, обеспечивая доступ к личным данным пользователя.
Для распространения вредоносной ссылки могут использоваться различные каналы связи: электронная почта, комментарии на сайте, сообщения в социальных сетях. Анкорные ссылки чаще провоцируют пользователей на клик.
Хранимая XSS-атака
Для успешного выполнения хранимой атаки злоумышленнику достаточно найти уязвимость на сайте и разместить на своём сервере вредоносный скрипт. Затем на сайте размещается тег <script>
, который загружает скрипт с вредоносным кодом с внешнего сайта, например, в комментариях. При загрузке заражённой страницы вредоносный скрипт каждый раз передаётся в браузер пользователя.
- Злоумышленник обнаруживает сайт с XSS уязвимостью и выполняет инъекцию вредоносного скрипта, который крадет cookies пользователя.
- При каждом посещении сайта вредоносный скрипт активируется без выполнения каких либо действий.
- Сессионные куки из браузера посетителя отправляются злоумышленнику.
Включение заголовка 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), указывая браузеру пользователя сообщать о попытках нарушения политики безопасности контента. Об этом я расскажу в отдельной статье.
Возвращаясь к основной теме, рекомендую настроить сервер таким образом, чтобы HTTP заголовок включал фильтрацию и при XSS-атаке блокировал загрузку страницы с небезопасным содержимым. В файле дополнительной конфигурации .htaccess (или httpd.conf, если у вас есть полный доступ к серверу) веб-сервера Apache необходимо добавить следующую запись:
<ifModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
</IfModule>
Для сервера Nginx дополните файл nginx.conf в разделе HTTP записью:
add_header X-XSS-Protection "1; mode=block";
В том случае, если доступ к конфигурационным файлам сервера отсутствует, но есть поддержка PHP, тогда используйте функцию:
<?php header("X-XSS-Protection: 1; mode=block"); ?>
Cross Site Scripting, также известный как XSS, — это один из способов внедрения вредоносного кода, который исполняется на стороне клиента. Пользователь может заметить что-то неладное, например, необычное поведение страницы, иногда атака совершается абсолютно не заметно в фоновом режиме.
Надеюсь, теперь вы стали немного больше понимать в HTTP-заголовках сервера и X-XSS поможет предотвратить межсайтовый скриптинг. Я использую заголовки безопасности на всех своих сайтах и настоятельно рекомендую вам сделать тоже самое. Вместе мы можем сделать интернет более безопасным! 😉
Надо и свой сайт защитить 🙂
Ответить
Добрый день! А антивирусы не помогут?
Ответить
Марго, антивирусы даже со встроенным межсетевым экраном в данном случае зачастую бесполезны. Они выявляют и блокируют другие угрозы, если только проактивная защита сможет выявить подозрительную активность.
Ответить
Защита своего сайта не маловажный фактор. Надо вашими рекомендациями воспользоваться, спасибо!
Ответить
Ну вот! А я так надеялась на антивирус! Думала, что это спасение от всех бед!
Ответить
Очень интересная и познавательная публикация! Кибербезопасность — это действительно важно.
Ответить
Антивирусы до одного пикантного места, от них толку вообще ноль. У нас на всех рабочих ПК стояли лицензионки, базы ежедневно обновлялись, и всё равно вся база утекла. Пришлось пентест делать и дырки залатывать. Вызвали спецов из TomHunter, они всю сеть проанализировали, и даже удивлялись потом — удивительно мол, что за всё время только одна атака была на систему. Но после того как они поколдовали над нашей сетью, больше никаких вирусов не было, тьфу х3…
Ответить