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.
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.
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.
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.
# 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);
}
[ ] 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
OWASP Top 10 Web Application Security Risks
OWASP Cheat Sheet Series
CWE (Common Weakness Enumeration)