Наши системы работают!

  +7(499)160-58-32   +7(499)169-21-22  

 

XSS: нападение и защита

Содержание

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

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

 

Что такое XSS и как он работает?

Механизм атаки XSS

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

Основные цели атак XSS

  • Кража cookie и данных сессии
  • Перехват учетных данных пользователя
  • Перенаправление на фишинговые сайты
  • Встраивание вредоносного кода в веб-страницу
  • Изменение содержимого сайта

 

Типы XSS-атак

1. Отраженный XSS (Reflected XSS)

Этот вид атаки использует вредоносные ссылки, отправленные жертве (например, через e-mail или мессенджеры). Когда пользователь открывает ссылку, вредоносный код выполняется в его браузере.

Пример отраженного XSS:

<a href="https://example.com/search?q=<script>alert('XSS')</script>">Кликните сюда</a>

 2. Хранимый XSS (Stored XSS)

Хранимый XSS опаснее, так как вредоносный код сохраняется на сервере и загружается при каждом посещении страницы. Например, злоумышленник может вставить вредоносный JavaScript в комментарий или поле профиля пользователя.

Пример хранимого XSS:

<form action="/comment" method="POST">

    <input type="text" name="comment" value="<script>stealCookies()</script>">

</form>

 3. DOM-Based XSS

Этот тип XSS происходит на стороне клиента, когда JavaScript-код манипулирует DOM без надлежащей проверки входных данных.

Пример DOM XSS:

<script>

    var search = window.location.hash.substring(1);

    document.write("<h1>" + search + "</h1>");

</script>

 

Методы защиты от XSS

1. Экранирование пользовательского ввода

Один из самых эффективных способов защиты — экранирование специальных символов (<, >, ", ', &) перед отображением их на веб-странице.

Пример:

function escapeHTML(str) {

    return str.replace(/&/g, "&amp;")

              .replace(/</g, "&lt;")

              .replace(/>/g, "&gt;")

              .replace(/"/g, "&quot;")

              .replace(/'/g, "&#039;");

}

 2. Использование Content Security Policy (CSP)

CSP запрещает выполнение встроенных скриптов и позволяет загружать JavaScript только с доверенных источников.

Пример CSP-заголовка:

Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-scripts.com

 3. Проверка и фильтрация входных данных

  • Удаляйте все ненужные теги с помощью библиотеки DOMPurify
  • Используйте htmlspecialchars() в PHP или sanitize() в других языках
  • Ограничивайте ввод пользователями, разрешая только безопасные значения

Пример фильтрации в PHP:

$input = htmlspecialchars($_GET['input'], ENT_QUOTES, 'UTF-8');

 4. Использование безопасных API и фреймворков

  • Применяйте innerText вместо innerHTML
  • Избегайте document.write() и eval()
  • В React используйте {dangerouslySetInnerHTML} только при полной уверенности в безопасности

Пример в React:

<div>{userInput}</div> // Безопасно

<div dangerouslySetInnerHTML={{ __html: userInput }} /> // Опасно!

 5. Ограничение работы JavaScript

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

Пример настройки HTTP-заголовков:

X-XSS-Protection: 1; mode=block

 6. Аудит и тестирование безопасности

Используйте автоматизированные инструменты для поиска уязвимостей:

  • Burp Suite – анализ и тестирование безопасности
  • OWASP ZAP – обнаружение XSS и других атак
  • Nmap и Nikto – поиск уязвимостей на веб-серверах

 

Заключение

XSS-атаки остаются серьезной угрозой для веб-приложений, но эффективная защита возможна при использовании правильных методов фильтрации, экранирования и безопасности кода. Регулярный аудит, настройка CSP и защита клиентского JavaScript помогут минимизировать риски и защитить пользователей от атак.





Теги: XSS

Дополнительные услуги