Что такое уязвимость Cross-Site Scripting (XSS)

«Что такое уязвимость Cross-Site Scripting (XSS)» — вопрос из категории Безопасность, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Cross-Site Scripting (XSS) — это тип уязвимости веб-приложений, который позволяет злоумышленнику внедрять вредоносный клиентский код (обычно JavaScript) на веб-страницы, просматриваемые другими пользователями. Цель — выполнить код в браузере жертвы для кражи данных (cookie, токены сессий), изменения содержимого страницы или перенаправления на фишинговые сайты. **Основные типы XSS:** 1. **Отражённый (Reflected XSS):** Вредоносный скрипт передаётся через URL или форму, и сервер сразу же "отражает" его в ответе пользователю. Скрипт не сохраняется на сервере. 2. **Хранимый (Stored/Persistent XSS):** Атакующий сохраняет вредоносный скрипт в базе данных на сервере (например, в комментарии, профиле пользователя). Скрипт выполняется каждый раз, когда кто-то просматривает заражённую страницу. 3. **На основе DOM (DOM-based XSS):** Уязвимость находится в клиентском коде, который манипулирует DOM-деревом страницы на основе пользовательского ввода без участия сервера. **Пример уязвимого кода (Python/Flask):** ```python from flask import Flask, request app = Flask(__name__) # Уязвимый эндпоинт @app.route('/search') def search(): query = request.args.get('q', '') # Прямой вывод пользовательского ввода без экранирования return f"

Результаты по запросу: {query}

" # URL для атаки: # http://example.com/search?q= ``` **Основные методы защиты:** * **Экранирование вывода (Output Escaping):** Всегда обрабатывайте данные, выводимые в HTML, преобразуя спецсимволы (`<`, `>`, `&`, `"`) в их безопасные эквиваленты (`<`, `>`, `&`, `"`). Большинство шаблонизаторов (Jinja2, Django Templates) делают это по умолчанию. * **Валидация ввода (Input Validation):** Проверяйте и очищайте все входящие данные на соответствие ожидаемому формату. * **Content Security Policy (CSP):** Используйте HTTP-заголовок `Content-Security-Policy` для указания браузеру, из каких источников разрешено загружать и выполнять скрипты.