# Языки и стек — обзор

← [Раздел](README.md) · [Главная](../README.md)

## Цель

Сориентироваться в **типичном технологическом стеке** веб-приложения: frontend, backend, mobile, DevOps-артефакты — чтобы понимать, **где** искать риски и **какой** scanner применить.

## Предварительно

- [Базы данных для SecOps](bazy-dannyh-chto-nuzhno-secops.md)

## Время

**2–3 часа**

---

## Full stack одной картинкой

```
[Browser / Mobile App]
        │ HTTPS
        ▼
[Load Balancer / CDN]
        │
        ▼
[Backend API] ──► [Database]
        │              │
        │              └── Redis (cache)
        ▼
[Message Queue] ──► [Worker jobs]
```

**DevSecOps** смотрит на **каждый блок**: TLS, headers, auth, secrets, images, IaC.

---

## Frontend (клиент)

| Технология | Где живёт | SecOps focus |
|------------|-----------|--------------|
| HTML/CSS | Браузер | CSP, XSS |
| JavaScript / TypeScript | Браузер + build | Supply chain (npm) |
| React, Vue, Angular | SPA frameworks | Env vars в bundle |
| Next.js, Nuxt | SSR/SSG | Server-side secrets |

**Важно:** всё в frontend **видно пользователю** — нельзя прятать API keys в JS.

---

## Backend (сервер)

| Язык | Типичные фреймворки | Package file |
|------|---------------------|--------------|
| Python | Django, FastAPI | requirements.txt, pyproject.toml |
| JavaScript/TS | Node, Express, NestJS | package.json |
| Java | Spring Boot | pom.xml, Gradle |
| Go | stdlib, Gin | go.mod |
| Ruby | Rails | Gemfile |
| C# | ASP.NET | *.csproj |

**SAST/SCA** привязываются к **языку** и lockfile.

---

## Mobile

| Platform | Язык | Артефакт |
|----------|------|----------|
| Android | Kotlin/Java | APK/AAB |
| iOS | Swift | IPA |
| Cross | Flutter, React Native | Общий код + native shell |

Риски: **hardcoded keys**, insecure storage, certificate pinning bypass.

---

## Data layer

| Компонент | Роль |
|-----------|------|
| PostgreSQL / MySQL | Основные данные |
| Redis | Кэш, сессии, rate limit |
| Elasticsearch | Поиск, логи |
| S3 | Файлы, static assets |

Scan: misconfig buckets, public Redis (порт 6379 в интернет — классика).

---

## DevOps-артефакты в том же repo

| Файл / папка | Инструмент |
|--------------|------------|
| `Dockerfile` | Hadolint, image scan |
| `docker-compose.yml` | Local dev, не prod as-is |
| `helm/`, `k8s/` | Kubesec, Kyverno |
| `terraform/` | tfsec, Checkov |
| `.gitlab-ci.yml` | Pipeline security |

---

## Monolith vs Microservices

| | Monolith | Microservices |
|---|----------|---------------|
| Структура | Один deployable | Много сервисов |
| SecOps | Один pipeline, проще старт | mTLS, service mesh, больше surface |
| Auth | Часто session in-app | JWT между сервисами |

DevSecOps в microservices: **network policies**, central identity, distributed tracing для IR.

---

## Как выбрать scanner (упрощённо)

| Что сканируем | Тип | Примеры инструментов |
|---------------|-----|----------------------|
| Исходник | SAST | Semgrep, SonarQube, CodeQL |
| Зависимости | SCA | Dependabot, Snyk, Trivy (libs) |
| Docker image | Image scan | Trivy, Grype |
| Running app | DAST | OWASP ZAP, Burp (pro) |
| Terraform | IaC scan | Checkov, tfsec |
| K8s manifests | Config scan | Kubesec, Polaris |

Один проект = **несколько** scanners на разных слоях.

---

## Типичный «стек стартапа» (пример)

| Слой | Выбор |
|------|-------|
| Frontend | React + TypeScript |
| Backend | Node + Express |
| DB | PostgreSQL |
| Cache | Redis |
| Hosting | Kubernetes на cloud |
| CI | GitHub Actions |
| IaC | Terraform |

Ваш реальный стек может отличаться — **принципы** те же.

---

## Самопроверка

1. Почему API key нельзя класть во frontend JS?
2. Какой файл сканирует SCA в Node-проекте?
3. Чем SAST отличается от image scan?
4. Назовите три компонента типичного web stack.

---

## Дальше

→ [03 — DevOps-основа](../03-devops-osnova/README.md)
