OWASP Top 10 — Cheat Sheet

Tag: security, owasp, web-security, appsec, vulnerabilities, backend

Livello: intermedio

TL;DR: Standard di riferimento per i 10 rischi critici di sicurezza delle applicazioni web. Guida rapida a vulnerabilità, mitigazioni pratiche e domande da colloquio.

Concetti chiave

Broken Access Control: mancata verifica delle autorizzazioni utente sui dati o sulle funzioni sensibili.

Cryptographic Failures: esposizione di dati sensibili a causa di crittografia debole, assente o chiavi hardcoded.

Injection: interpreti ingannati da input non sanificato (SQL, NoSQL, OS Command, LDAP Injection).

Insecure Design: difetti architetturali a monte non risolvibili con una corretta implementazione successiva.

Security Misconfiguration: impostazioni di default insicure, servizi inutilizzati attivi, stack trace esposti in produzione.

Vulnerable and Outdated Components: dipendenze esterne con CVE note o non aggiornate (supply chain risk).

Identification and Authentication Failures: session management debole, mancata protezione da brute-force o credential stuffing.

Software and Data Integrity Failures: pipeline CI/CD non verificate, deserializzazione insicura di oggetti non fidati.

Security Logging and Monitoring Failures: assenza di audit log o mancato alerting tempestivo in caso di attacco.

Server-Side Request Forgery (SSRF): il server effettua richieste remote a risorse non fidate o interne.

Domande tipiche e risposte pronte

Q: Come proteggi un'API REST dal Broken Access Control?R: Implemento il principio del minimo privilegio e convalido sempre i permessi a livello di controller e servizio per ogni richiesta, evitando di fidarmi degli ID inviati dal client.

Q: Qual è la difesa primaria contro la SQL Injection?R: Uso query parametrizzate e prepared statement supportati dall'ORM, validando e tipizzando rigorosamente gli input utente.

Q: Che cos'è una vulnerabilità IDOR e come si previene?R: È un accesso diretto a un oggetto tramite ID manipolabile. La prevengo verificando che l'utente autenticato sia effettivamente autorizzato ad accedere a quello specifico record.

Q: Come gestisci il rischio di Vulnerable and Outdated Components?R: Integro scanner di vulnerabilità nella pipeline CI/CD (come npm audit, Snyk o Dependabot) e blocco la build se emergono CVE critiche non risolte.

Insidie e errori comuni

Confondere autenticazione (chi sei) con autorizzazione (cosa puoi fare).

Affidarsi alla sola validazione frontend senza rieseguire i controlli sul backend.

Concatenare stringhe per costruire comandi shell o query al database.

Utilizzare algoritmi crittografici obsoleti come MD5 o SHA1 per l'hashing delle password.

Esporre header di debug, documentazione Swagger pubblica o credenziali nei commit git.

Accettare URL arbitrari forniti dall'utente per fetch server-side senza whitelist rigida.

Snippet e comandi

# Audit delle dipendenze Node.js
npm audit
npm audit fix

# Scansione di dipendenze con Snyk
npx snyk test

TypeScript

// Prevenzione SQL Injection con query parametrizzata (es. pg / node-postgres)
const query = 'SELECT id, username, email FROM users WHERE id = $1';
const values = [userId];
const result = await db.query(query, values);

TypeScript

// Controllo di autorizzazione su risorsa (Broken Access Control prevention)
async function getInvoice(req: Request, res: Response) {
  const { invoiceId } = req.params;
  const currentUserId = req.user.id;

  const invoice = await invoiceService.findById(invoiceId);
  if (!invoice || invoice.ownerId !== currentUserId) {
    return res.status(403).json({ error: 'Access denied' });
  }

  return res.json(invoice);
}

Da ripassare

[ ] Parametrizzazione delle query e uso corretto dei prepared statement

[ ] Meccanismi di hashing sicuro per password (bcrypt, Argon2)

[ ] Gestione dei token JWT (scadenza, revoca, storage sicuro)

[ ] Configurazione di Content Security Policy (CSP) e header HTTP di sicurezza

[x] Differenza tra autenticazione e autorizzazione

[x] Meccanismi base di sanitizzazione dell'input contro XSS e Injection

Riferimenti

OWASP Top 10 Web Application Security Risks

OWASP Cheat Sheet Series

CWE (Common Weakness Enumeration)

Jarvis Interviews
Jarvis