Přeskočit na obsah
_CORE
Know-How

OWASP Top 10: Broken Access Control

7 min čtení
OWASPSecurityAccess Control

Broken Access Control je od roku 2021 zranitelnost číslo jedna v OWASP Top 10. Každá třetí webová aplikace má problém s autorizací — uživatelé přistupují k datům, ke kterým nemají oprávnění.

Co je Broken Access Control

Access control zajišťuje, že uživatel může dělat pouze to, k čemu má oprávnění. Broken access control nastává, když aplikace tuto kontrolu neprovádí správně — uživatel může měnit cizí data, přistupovat k admin rozhraní nebo eskalovat svá práva.

Typické útoky

  • IDOR (Insecure Direct Object Reference): Změna ID v URL — /api/users/123 → /api/users/456
  • Forced browsing: Přímý přístup na /admin bez kontroly role
  • Parameter tampering: Změna role v POST requestu — role=user → role=admin
  • Path traversal: Přístup k souborům mimo povolený adresář

Příklad zranitelného kódu

// ❌ ŠPATNĚ — žádná kontrola vlastnictví app.get('/api/orders/:id', async (req, res) => { const order = await Order.findById(req.params.id); res.json(order); }); // ✅ SPRÁVNĚ — kontrola vlastnictví app.get('/api/orders/:id', async (req, res) => { const order = await Order.findById(req.params.id); if (!order || order.userId !== req.user.id) { return res.status(403).json({ error: 'Forbidden' }); } res.json(order); });

Prevence

  • Deny by default — vše zakázáno, pokud není explicitně povoleno
  • Kontrola autorizace na serveru, nikdy jen na klientu
  • Používejte RBAC nebo ABAC pro správu oprávnění
  • Logujte všechny pokusy o neautorizovaný přístup
  • Automatizované testy autorizace v CI/CD

Middleware pattern

const authorize = (allowedRoles) => { return (req, res, next) => { if (!req.user || !allowedRoles.includes(req.user.role)) { return res.status(403).json({ error: 'Insufficient permissions' }); } next(); }; }; app.delete('/api/users/:id', authorize(['admin']), deleteUser);

Klíčový takeaway

Access control patří na server. Každý endpoint musí ověřit, zda aktuální uživatel má právo provést danou akci. Deny by default, logujte pokusy, testujte automaticky.

CORE SYSTEMS tým

Praktické know-how z reálných projektů. Bez buzzwordů, s kódem.