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

Какие знаешь виды атак?

2.0 Middle🔥 162 комментариев
#JavaScript Core

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

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

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

Виды атак, актуальных для Frontend Developer

Как Frontend Developer, я должен понимать виды атак, которые могут нацеливаться на клиентскую часть приложения, так как современные браузерные приложения стали сложными и уязвимыми. Вот основные категории, с которыми мы сталкиваемся:

1. Атаки на уровне клиента (браузера)

XSS (Cross-Site Scripting)

Наиболее распространённая атака. Злоумышленник внедряет вредоносный JavaScript-код в страницу, который выполняется в браузере жертвы.

  • Reflected XSS: Скрипт внедряется через параметры URL (например, через поле поиска) и мгновенно отражается на странице.
    // Пример уязвимого кода
    const searchParams = new URLSearchParams(window.location.search);
    const query = searchParams.get('q');
    // Опасная вставка без санации
    document.getElementById('results').innerHTML = `Вы искали: ${query}`;
    
    *Защита:* Всегда использовать **экранирование (escaping)** или `textContent` вместо `innerHTML`, валидация и санация входных данных.
  • Stored XSS: Вредоносный скрипт сохраняется на сервере (в базе данных, комментариях) и выполняется при каждой загрузке страницы.
  • DOM-based XSS: Уязвимость существует исключительно в клиентском коде, когда данные из источника (например, document.location) без проверки попадают в опасные функции (eval(), innerHTML).
    // Уязвимый код, использующий fragment identifier
    const token = window.location.hash.substring(1);
    document.write(`<img src="${token}">`); // Опасно!
    

CSRF (Cross-Site Request Forgery)

Атака, при которой злоумышленник заставляет браузер аутентифицированного пользователя выполнить нежелательное действие на доверенном сайте (например, перевод денег).

  • Механизм: Используется уязвимость в том, что браузер автоматически отправляет куки сессии с каждым запросом к домену.
    <!-- Злоумышленник размещает на своём сайте: -->
    <img src="https://bank.com/transfer?to=attacker&amount=10000" width="0" height="0" />
    <!-- Если пользователь аутентифицирован в bank.com, запрос выполнится -->
    
  • Защита: Использование CSRF-токенов, отправляемых сервером и проверяемых для каждого состоянияизменяющего запроса (POST, PUT). Современные фреймворки, такие как Laravel или Django, имеют встроенную защиту.

Clickjacking

Пользователя обманом заставляют кликнуть на невидимый или замаскированный элемент интерфейса. Страница-жертва встраивается в злоумышленнический сайт через <iframe> с opacity: 0.

  • Защита: Заголовок X-Frame-Options: DENY (или SAMEORIGIN) и современный CSP (Content Security Policy) с директивой frame-ancestors.

2. Атаки на инфраструктуру и конфигурацию

Уязвимости зависимостей (Supply Chain Attacks)

Атаки через сторонние библиотеки (npm, CDN). Злоумышленник может:

  • Внести вредоносный код в популярную библиотеку.
  • Создать пакет с опечаткой в имени (typosquatting).
  • Защита: Регулярное обновление зависимостей (npm audit), использование package-lock.json, инструменты статического анализа (SAST), проверка целостности подресурсов (SRI).

3. Атаки на данные и конфиденциальность

Инъекции

Хотя чаще ассоциируются с бэкендом, на фронтенде также возможны.

  • HTML/XML-инъекции: Аналогичны XSS, но фокус на подмену структуры документа.
  • Инъекции в шаблоны (Client-Side Template Injection): Если фронтенд-фреймворк (AngularJS, Vue) динамически рендерит шаблоны из пользовательского ввода.
    // Уязвимость в старых версиях AngularJS
    const userInput = '{{constructor.constructor("alert(1)")()}}';
    $scope.unsafeValue = userInput; // Может привести к выполнению кода
    

Фишинг и социальная инженерия

Создание поддельных интерфейсов входа, которые выглядят идентично настоящим, для кражи учётных данных. Защита здесь больше лежит в области пользовательского образования.

Утечка данных через сторонние скрипты

Трекеры, аналитика, виджеты социальных сетей могут передавать чувствительную информацию (email, поведение) третьим сторонам.

  • Защита: Строгие настройки CSP, ограничение прав сторонних скриптов, регулярный аудит.

Ключевые меры защиты для Frontend Developer

  • Content Security Policy (CSP): Самый мощный инструмент. Заголовок CSP позволяет явно указать браузеру, откуда можно загружать скрипты, стили, изображения, ограничив выполнение встроенного JavaScript.
    <!-- Пример строгой политики -->
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://trusted.cdn.com; style-src 'self' 'unsafe-inline';">
    
  • Санация и валидация: Всегда санируйте пользовательский ввод на выходе (перед вставкой в DOM), а не только на входе. Используйте библиотеки типа DOMPurify.
  • Заголовки безопасности HTTP:
    *   `X-Content-Type-Options: nosniff` – запрещает MIME-sniffing.
    *   `Strict-Transport-Security (HSTS)` – принудительное использование HTTPS.
  • Безопасная работа с аутентификацией: Никогда не храните токены в localStorage (уязвимо для XSS). Предпочтительнее httpOnly и Secure куки. Используйте OAuth 2.0 и PKCE для SPA.
  • Регулярное обучение и аудит: Следование принципу минимальных привилегий для каждого ресурса и скрипта, участие в программах Bug Bounty, code review с фокусом на безопасность.

Понимание этих атак и методов защиты критически важно для создания надежных клиентских приложений, которые являются первым рубежом обороны между пользователем и вашей системой.