Middle
45
questionbank

Что такое XSS? Приведите примеры и расскажите, как защитить приложение от этой уязвимости.

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

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

Основные типы XSS:

  • Отраженная (Reflected) XSS: Вредоносный скрипт содержится в HTTP-запросе и "отражается" в ответе сервера без надлежащей санитизации.
    html
  • Хранимая (Stored) XSS: Вредоносный скрипт сохраняется на сервере (например, в базе данных) и отображается на веб-странице при каждом просмотре другим пользователем.
    html
  • DOM-based XSS: Уязвимость возникает на стороне клиента, когда вредоносный скрипт модифицирует DOM веб-страницы. Источник уязвимости часто находится в клиентском JavaScript, обрабатывающем данные из URL (например, параметры запроса) без надлежащей санитизации.
    javascript

Как защитить приложение:

  1. Экранирование (Escaping) выводимых данных: Преобразовывать специальные символы HTML в их соответствующие сущности перед выводом данных на страницу.

    • & -> &
    • < -> &lt;
    • > -> &gt;
    • " -> &quot;
    • ' -> &#39; (или &apos;)

    Большинство веб-фреймворков предоставляют встроенные функции для этого.

    python
    python
  2. Использование HTTP-заголовков безопасности:

    • Content-Security-Policy (CSP): Определяет источники контента, разрешенного для загрузки и выполнения браузером.
      nginx
    • X-XSS-Protection: Устаревший, но все еще полезный заголовок для активации встроенного XSS-фильтра в некоторых браузерах. Рекомендуется использовать CSP вместо него.
      nginx
  3. Санитизация (Sanitization) пользовательского ввода: Удаление или фильтрация потенциально опасных тегов и атрибутов из пользовательского ввода, особенно если разрешен ограниченный HTML (например, в текстовом редакторе). Использовать библиотеки для санитизации.

    python
  4. Защита от DOM-based XSS:

    • Избегать использования innerHTML, document.write, eval() с данными, поступающими из ненадежных источников (например, location.href, location.search).
    • Использовать безопасные API, которые по умолчанию обрабатывают данные как текст (например, textContent).
    javascript

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