Přeskočit na obsah
_CORE
AI & Agentic Systems Core Informační Systémy Cloud & Platform Engineering Data Platforma & Integrace Security & Compliance QA, Testing & Observability IoT, Automatizace & Robotika Mobile & Digital Banky & Finance Pojišťovnictví Veřejná správa Obrana & Bezpečnost Zdravotnictví Energetika & Utility Telco & Média Průmysl & Výroba Logistika & E-commerce Retail & Loyalty
Reference Technologie Blog Knowledge Base O nás Spolupráce Kariéra
Pojďme to probrat

OWASP Top 10: Broken Access Control

01. 01. 2024 1 min čtení intermediate

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.

owaspsecurityaccess control