Веб-безопасность — зачем и обзор угроз

Веб-безопасность — область знаний и практик, направленных на защиту веб-приложений от несанкционированного доступа, утечки данных и вредоносных действий. Каждый разработчик несёт ответственность за безопасность кода, который пишет.

Зачем нужно

Взлом приложения стоит компании: штрафы GDPR (до 4% глобального оборота), репутационный ущерб, потеря клиентов. Уязвимости появляются в обычном рабочем коде — SQL-запросах, шаблонах, API. Безопасность — не отдельная специализация, а часть профессии разработчика.

Где используется

  • Любое веб-приложение с пользовательским вводом, аутентификацией или данными
  • REST/GraphQL API, серверный рендеринг, SPA
  • Инфраструктура: серверы, Docker, CI/CD

Основной контент

OWASP Top 10 (2021)

A01 Broken Access Control       → IDOR, privilege escalation
A02 Cryptographic Failures      → HTTP вместо HTTPS, MD5 паролей
A03 Injection                   → SQLi, XSS, командные инъекции
A04 Insecure Design             → Архитектурные недостатки
A05 Security Misconfiguration   → Дефолтные пароли, debug в prod
A06 Vulnerable Components       → Устаревшие npm пакеты
A07 Auth Failures               → Brute force, слабые сессии
A08 Software Integrity          → Supply chain attacks
A09 Security Logging Failures   → Нет аудит-трейла
A10 SSRF                        → Запросы к внутренней сети

Ключевые принципы защиты

Defence in Depth    → Несколько слоёв защиты (WAF + код + мониторинг)
Least Privilege     → Минимум прав для каждого компонента
Fail Secure         → При ошибке — запретить, а не разрешить
Zero Trust          → Верифицировать каждый запрос, даже внутренний
Input Validation    → Никогда не доверять данным от клиента

Быстрый security checklist для нового проекта

# 1. HTTPS повсюду (HSTS)
# Strict-Transport-Security: max-age=31536000; includeSubDomains

# 2. Security headers (helmet.js)
npm install helmet
app.use(helmet); # CSP, X-Frame-Options, HSTS, XSS-Protection

# 3. Dependency audit в CI
npm audit --audit-level=high

# 4. Environment secrets (не в коде)
# DATABASE_URL, JWT_SECRET — только в .env, в .gitignore

# 5. Rate limiting на Auth эндпоинтах
# 5 попыток / 15 минут на /login

# 6. Параметризованные SQL-запросы
# Никакой конкатенации пользовательских данных в SQL

Модель угроз для типичного веб-приложения

Пользователь → [WAF/CDN] → [Сервер] → [БД]
                ↓              ↓         ↓
           DDoS защита    XSS, SQLi    Least Privilege
           Rate Limiting  SSRF         Шифрование at rest
                          Auth bypass  Backup

Частые ошибки

  • "У нас нечего красть" — данные любого пользователя имеют ценность для атакующих
  • Безопасность только на фронтенде — клиентская валидация легко обходится
  • Хранение паролей в MD5 или SHA1 — взламываются за секунды на GPU
  • Ошибки в логах с PII и SQL-запросами — вторичная утечка данных

Связанные темы

Ресурсы