awesome-everything EN
↑ Обратно к восхождению

Безопасность

OWASP Top 10: чтение кода и конфигов

Суть Читай реальные сниппеты кода, конфига и лога — проверку access control, SSRF-фетч, конфиг CORS — называй категорию OWASP и выбирай фикс, который сеньор делает первым.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

Уязвимости живут в коде и конфиге, а не в абстракции. Читай каждый сниппет так, как читал бы в pull request, называй категорию OWASP и выбирай фикс, к которому сеньор тянется первым — корневую причину, а не костыль.

Цель

Потренируй цикл ревью: прочитай хендлер или конфиг, определи, к какой категории Top 10 он относится, предскажи эксплойт и потянись за структурным фиксом до любого периметрового патча.

Сниппет 1 — проверка владения

// GET /api/invoices/:id
app.get("/api/invoices/:id", requireLogin, async (req, res) => {
  const invoice = await db.invoice.findUnique({
    where: { id: Number(req.params.id) },
  });
  if (!invoice) return res.status(404).end();
  res.json(invoice);   // returns whatever row matched the id
});
Викторина

requireLogin выполняется, значит вызывающий аутентифицирован. В чём уязвимость и какой минимальный корректный фикс?

Сниппет 2 — фетчер URL

// POST /api/preview  { "url": "..." }
app.post("/api/preview", async (req, res) => {
  const r = await fetch(req.body.url);     // fetch whatever the client sent
  const html = await r.text();
  res.send(extractOpenGraph(html));        // server returns the fetched content
});
Викторина

Какой это класс бага, какой эксплойт с наибольшим импактом и какая правильная защита?

Сниппет 3 — конфиг CORS

app.use(cors({
  origin: req.headers.origin,   // reflect whatever Origin the request sent
  credentials: true,            // allow cookies to be sent cross-origin
}));
Викторина

Отражение Origin запроса при разрешённых credentials — что это на самом деле допускает и как это чинить?

Сниппет 4 — строка лога

2026-05-29T11:42:08Z WARN auth login failed user=alice@corp.com
  pw=hunter2 ip=203.0.113.9 ua="Mozilla/5.0" attempt=5 within=30s
Викторина

В этой одной строке лога видны две находки. Какая пара верна?

Итог

Каждая находка читается обратно к категории и фиксу корневой причины: аутентифицированный хендлер без проверки владения — это IDOR/Broken Access Control (ограничь по owner_id); сервер, фетчащий присланный клиентом URL, — это SSRF (allowlist плюс отклонение приватных диапазонов плюс блокировка IMDS); отражение Origin запроса с credentials — это Security Misconfiguration CORS (allowlist доверенных origin); а строка лога с паролем в открытом виде и быстрыми повторными неудачами — утечка чувствительных данных плюс пробел в auth/logging. Читай код и конфиг как ревьюер — назови причину, потом чини причину.

Продолжить восхождение ↑OWASP Top 10: аудит и hardening уязвимого сервиса
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.