← Назад к вопросам

Какие знаешь виды уязвимостей Frontend?

1.8 Middle🔥 172 комментариев
#JavaScript Core

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Уязвимости Frontend-приложений: классификация и методы защиты

Frontend-разработка, несмотря на кажущуюся «безопасность» клиентской части, изобилует уязвимостями, которые могут привести к компрометации данных пользователей, сессий или даже всей системы. Вот ключевые категории угроз:

1. Уязвимости, связанные с вводом данных

Инъекции — классическая, но всё ещё актуальная проблема.

  • XSS (Cross-Site Scripting): выполнение сторонних скриптов в браузере пользователя.
    • Reflected XSS: вредоносный код передаётся через параметры URL.
    • Stored XSS: скрипт сохраняется на сервере (например, в комментариях).
    • DOM-based XSS: уязвимость возникает исключительно на клиенте при манипуляции DOM.
// Пример уязвимого кода
const userInput = location.hash.substring(1);
document.body.innerHTML = userInput; // Опасно! Прямое присвоение

// Защита: санитизация или textContent
document.body.textContent = userInput;

2. Проблемы аутентификации и сессий

  • Небезопасное хранение токенов: сохранение JWT в localStorage делает его доступным для XSS-атак.
  • CSRF (Cross-Site Request Forgery): выполнение действий от имени пользователя без его согласия.
  • Недостаточная защита от перебора: слабые проверки на стороне клиента.
// Лучшая практика для токенов
// Использовать httpOnly cookies для критичных операций
fetch('/api/data', {
  credentials: 'include' // Куки будут отправлены автоматически
});

3. Уязвимости зависимостей

Устаревшие или вредоносные пакеты из npm-реестра — огромный риск. Регулярно используйте:

npm audit
npx audit-ci --critical

4. Конфиденциальность данных

  • Утечка через метаданные: API-ключи, скрытые в JavaScript-коде.
  • Чувствительные данные в localStorage: номера телефонов, части платежных данных.
  • Небезопасные логи: console.log в продакшене.

5. Безопасность конфигурации

  • Неверные CORS-настройки: разрешение домена * для конфиденциальных API.
  • Отсутствие security-заголовков: Content-Security-Policy, X-Frame-Options.

6. Клиент-серверная архитектура

  • Избыточное доверие клиенту: валидация только на frontend, без дублирования на backend.
  • Информационная утечка через ошибки: подробные stack trace в ответах API.

7. Современные угрозы

  • Clickjacking: невидимые iframe поверх интерфейса.
  • Timing-атаки: анализ времени выполнения операций.
  • Уязвимости в WebAssembly: если используется в проекте.

Практические методы защиты

  1. Content Security Policy (CSP) — самый эффективный инструмент против XSS:
<meta http-equiv="Content-Security-Policy" 
      content="default-src 'self'; script-src 'self' https://trusted.cdn.com;">
  1. Строгая валидация и санитизация:
// Использование библиотек типа DOMPurify
import DOMPurify from 'dompurify';
const cleanHTML = DOMPurify.sanitize(userInput);
  1. Заголовки безопасности:

    • Strict-Transport-Security
    • X-Content-Type-Options: nosniff
    • Referrer-Policy
  2. Регулярное обновление зависимостей с интеграцией в CI/CD.

  3. Принцип минимальных привилегий для API-токенов и CORS.

Ключевая мысль: фронтенд-безопасность — это не отдельный слой, а интегральная часть разработки. Каждый компонент, от валидации форм до конфигурации веб-сервера, должен проектироваться с учётом угроз. Современные фреймворки (React, Vue, Angular) предоставляют базовые защиты, но не заменяют сознательный подход разработчика. Регулярный аудит кода, статический анализ (ESLint с security-правилами) и участие в программах bug bounty формируют культуру безопасности, необходимую для создания надёжных приложений.

Какие знаешь виды уязвимостей Frontend? | PrepBro