`, скрипт выполнится.\n\n**Меры защиты:**\n\n* **Всегда санитизируйте пользовательский ввод** при выводе на страницу.\n* Используйте библиотеки типа `DOMPurify` для очистки HTML.\n* Применяйте **CSP (Content Security Policy)** для ограничения источников скриптов.\n* Для динамического создания элементов используйте `textContent` вместо `innerHTML`.\n\n```javascript\n// Безопасное создание элемента\nconst div = document.createElement('div');\ndiv.textContent = userInput; // Скрипты не выполнятся\n```\n\n### 2. CSRF (Cross-Site Request Forgery)\nЭта уязвимость позволяет **атакующему** выполнять действия на сайте в контексте авторизованного пользователя, используя его активную сессию.\n\n**Пример атаки:** \nПользователь авторизован на сайте `example.com`. Атакующий размещает на другом сайте форму, которая отправляет POST-запрос на `example.com/transfer-money` с параметрами перевода.\n\n**Меры защиты:**\n\n* Использование **CSRF-токенов**, уникальных для каждой сессии/формы.\n* Проверка заголовка `Origin` или `Referer` для подтверждения источника запроса.\n* Использование **SameSite cookies** (`Strict` или `Lax` режимы).\n\n```javascript\n// Пример генерации и проверки CSRF-токена на клиенте и сервере\n// Сервер генерирует токен и отправляет его в мета-теге\nconst csrfToken = document.querySelector('meta[name=\"csrf-token\"]').getAttribute('content');\n\n// Добавление токена в каждый запрос\nfetch('/api/action', {\n method: 'POST',\n headers: {\n 'X-CSRF-Token': csrfToken,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(data)\n});\n```\n\n### 3. Небезопасная обработка данных и состояние\n\n* **Уязвимые зависимости:** Использование библиотек и пакетов с известными уязвимости (CVE). Регулярное обновление (`npm audit`, `yarn audit`) и проверка через инструменты типа `Snyk` критически важны.\n* **Незащищенная передача данных:** Отправка конфиденциальной информации через незащищенные каналы (например, пароли в GET-параметрах). **Всегда используйте HTTPS** и безопасные методы (POST для конфиденциальных данных).\n* **Уязвимости в управлении состоянием:** Сохранение токенов, ключей в **localStorage** делает их доступными для XSS-атак. Более безопасно использовать **sessionStorage** (данные очищаются после закрытия сессии) или **httpOnly cookies** (недоступны для JavaScript).\n\n### 4. Информационная уязвимость и конфигурационные ошибки\n\n* **Ошибки в конфигурации CORS:** Слишком разрешительная политика CORS (`Access-Control-Allow-Origin: *`) для приватных API может позволить несанкционированный доступ с других доменов. Конфигурация должна быть максимально строгой.\n\n```javascript\n// Плохая конфигурация CORS на сервере (пример для Express)\napp.use(cors({\n origin: '*' // Опасно! Позволяет запросы с любого домена\n}));\n\n// Более безопасная конфигурация\napp.use(cors({\n origin: ['https://trusted-domain.com', 'https://app.example.com'] // Список доверенных источников\n}));\n```\n\n* **Утечка информации через ошибки:** Необработанные ошибки могут раскрывать внутреннюю структуру API, пути файлов или другую чувствительную информацию в стек-трейсах. Необходима их унифицированная обработка.\n\n### 5. UI/UX-уязвимости (кликджекинг и др.)\n\n* **Кликджекинг:** Техника, когда атакующий создает прозрачный или замаскированный элемент поверх интерфейса, заставляя пользователя кликать по нему. Защита включает использование **X-Frame-Options** или **CSP с директивой frame-ancestors** для ограничения фреймов.\n\n**Профилактика и общие принципы безопасности:**\n\n* **Регулярное обучение и аудит:** Знание новых угроз и регулярный анализ собственного кода.\n* **Принцип минимальных прав:** Запрашивать и использовать только необходимые данные/права.\n* **Валидация на всех уровнях:** Клиентская валидация для UX, серверная — для безопасности.\n* **Использование современных безопасных практик:** OAuth 2.0 для аутентификации, JWT с коротким сроком жизни, биометрическая аутентификация где возможно.\n* **Инструменты и автоматизация:** Использование линтеров (`eslint-plugin-security`), сканеров уязвимости в CI/CD, инструментов мониторинга реальных атак.\n\nСовременный фронтенд — это не только создание интерфейсов, но и построение надежной, безопасной среды для пользователей. Игнорирование уязвимости может привести к потере данных, финансовым ущербам и репутационным рискам для компании.","dateCreated":"2026-04-04T21:51:16.907763","upvoteCount":0,"author":{"@type":"Person","name":"deepseek-v3.2"}}}}
← Назад к вопросам

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

2.0 Middle🔥 181 комментариев
#Soft Skills и рабочие процессы

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

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

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

Уязвимости в Frontend-разработке

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

1. XSS (Cross-Site Scripting)

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

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

  • Reflected XSS: Вредоносный скрипт передается через параметры URL (например, в поисковом запросе) и немедленно отражается на странице.
  • Stored XSS: Скрипт сохраняется на сервере (например, в базе данных комментариев) и выполняется каждый раз, когда пользователь загружает страницу.
  • DOM-based XSS: Уязвимость возникает из-за неправильной обработки данных клиентским JavaScript, без непосредственного участия сервера.

Пример уязвимого кода:

<!-- Опасная обработка пользовательского ввода -->
<div>
  <%= userComment %> <!-- Вставка без санитизации -->
</div>

Если userComment содержит <script>alert('XSS')</script>, скрипт выполнится.

Меры защиты:

  • Всегда санитизируйте пользовательский ввод при выводе на страницу.
  • Используйте библиотеки типа DOMPurify для очистки HTML.
  • Применяйте CSP (Content Security Policy) для ограничения источников скриптов.
  • Для динамического создания элементов используйте textContent вместо innerHTML.
// Безопасное создание элемента
const div = document.createElement('div');
div.textContent = userInput; // Скрипты не выполнятся

2. CSRF (Cross-Site Request Forgery)

Эта уязвимость позволяет атакующему выполнять действия на сайте в контексте авторизованного пользователя, используя его активную сессию.

Пример атаки: Пользователь авторизован на сайте example.com. Атакующий размещает на другом сайте форму, которая отправляет POST-запрос на example.com/transfer-money с параметрами перевода.

Меры защиты:

  • Использование CSRF-токенов, уникальных для каждой сессии/формы.
  • Проверка заголовка Origin или Referer для подтверждения источника запроса.
  • Использование SameSite cookies (Strict или Lax режимы).
// Пример генерации и проверки CSRF-токена на клиенте и сервере
// Сервер генерирует токен и отправляет его в мета-теге
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');

// Добавление токена в каждый запрос
fetch('/api/action', {
  method: 'POST',
  headers: {
    'X-CSRF-Token': csrfToken,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(data)
});

3. Небезопасная обработка данных и состояние

  • Уязвимые зависимости: Использование библиотек и пакетов с известными уязвимости (CVE). Регулярное обновление (npm audit, yarn audit) и проверка через инструменты типа Snyk критически важны.
  • Незащищенная передача данных: Отправка конфиденциальной информации через незащищенные каналы (например, пароли в GET-параметрах). Всегда используйте HTTPS и безопасные методы (POST для конфиденциальных данных).
  • Уязвимости в управлении состоянием: Сохранение токенов, ключей в localStorage делает их доступными для XSS-атак. Более безопасно использовать sessionStorage (данные очищаются после закрытия сессии) или httpOnly cookies (недоступны для JavaScript).

4. Информационная уязвимость и конфигурационные ошибки

  • Ошибки в конфигурации CORS: Слишком разрешительная политика CORS (Access-Control-Allow-Origin: *) для приватных API может позволить несанкционированный доступ с других доменов. Конфигурация должна быть максимально строгой.
// Плохая конфигурация CORS на сервере (пример для Express)
app.use(cors({
  origin: '*' // Опасно! Позволяет запросы с любого домена
}));

// Более безопасная конфигурация
app.use(cors({
  origin: ['https://trusted-domain.com', 'https://app.example.com'] // Список доверенных источников
}));
  • Утечка информации через ошибки: Необработанные ошибки могут раскрывать внутреннюю структуру API, пути файлов или другую чувствительную информацию в стек-трейсах. Необходима их унифицированная обработка.

5. UI/UX-уязвимости (кликджекинг и др.)

  • Кликджекинг: Техника, когда атакующий создает прозрачный или замаскированный элемент поверх интерфейса, заставляя пользователя кликать по нему. Защита включает использование X-Frame-Options или CSP с директивой frame-ancestors для ограничения фреймов.

Профилактика и общие принципы безопасности:

  • Регулярное обучение и аудит: Знание новых угроз и регулярный анализ собственного кода.
  • Принцип минимальных прав: Запрашивать и использовать только необходимые данные/права.
  • Валидация на всех уровнях: Клиентская валидация для UX, серверная — для безопасности.
  • Использование современных безопасных практик: OAuth 2.0 для аутентификации, JWT с коротким сроком жизни, биометрическая аутентификация где возможно.
  • Инструменты и автоматизация: Использование линтеров (eslint-plugin-security), сканеров уязвимости в CI/CD, инструментов мониторинга реальных атак.

Современный фронтенд — это не только создание интерфейсов, но и построение надежной, безопасной среды для пользователей. Игнорирование уязвимости может привести к потере данных, финансовым ущербам и репутационным рискам для компании.

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