Веб-безопасность — зачем и обзор угроз
Веб-безопасность — область знаний и практик, направленных на защиту веб-приложений от несанкционированного доступа, утечки данных и вредоносных действий. Каждый разработчик несёт ответственность за безопасность кода, который пишет.
Зачем нужно
Взлом приложения стоит компании: штрафы 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-запросами — вторичная утечка данных
Связанные темы
- _MOC Безопасность
- Broken Access Control
- SQL Injection
- Secure SDLC -- безопасный жизненный цикл
- Хранение паролей