Tag: secure-coding, owasp, appsec, security, injection, auth, validation
Livello: intermedio
TL;DR: Principi di programmazione sicura, mitigazione delle vulnerabilità OWASP Top 10 e pattern difensivi per backend e frontend.
Convalidare sempre l'input lato server con allowlist rigorose.
Non fidarsi mai dei dati provenienti dal client o da terze parti.
Applicare il principio del minor privilegio per processi, database e ruoli utente.
Separare i dati dal codice tramite query parametrizzate e ORM.
Eseguire l'encoding dell'output in base al contesto di rendering.
Cifrare i dati a riposo e in transito con TLS aggiornato.
Gestire le sessioni tramite cookie con flag HttpOnly, Secure e SameSite.
Salvare le password esclusivamente con algoritmi di hashing lenti e saltati.
Centralizzare la gestione dei segreti fuori dal controllo versione.
Mantenere le dipendenze aggiornate verificando vulnerabilità note in CI/CD.
Q: Come previeni le SQL Injection nelle tue applicazioni?R: Uso costantemente query parametrizzate o query builder dell'ORM, evitando del tutto la concatenazione di stringhe SQL; valido inoltre i tipi di dato in ingresso con schema di validazione lato server.
Q: Qual è la differenza principale tra XSS e CSRF e come li mitighi?R: XSS esegue script malevoli nel browser della vittima ed è mitigato da output encoding contestuale e Content Security Policy; CSRF inganna il browser sfruttando sessioni attive ed è mitigato da token CSRF e cookie SameSite.
Q: Come gestisci l'autenticazione e la memorizzazione sicura delle password?R: Utilizzo funzioni di hashing a costo computazionale regolabile come Argon2id o bcrypt con salt casuale generato automaticamente per ogni password, senza mai salvare testo in chiaro o usare algoritmi rapidi come SHA-256.
Validare l'input esclusivamente tramite controlli JavaScript nel frontend.
Sanitizzare l'HTML con espressioni regolari artigianali invece di librerie dedicate.
Registrare segreti, chiavi API o token nei log applicativi o nei commit Git.
Configurare CORS con wildcard permissiva unita a credenziali abilitate.
Esporre stack trace di errore dettagliati all'utente finale in produzione.
Considerare innocuo l'IDOR omettendo controlli di autorizzazione per ogni risorsa richiesta.
// Parametric query difensiva contro SQL Injection
import { sql } from 'kysely';
export async function getUserById(db: any, userId: string) {
return await db
.selectFrom('users')
.selectAll()
.where('id', '=', userId)
.executeTakeFirst();
}
TypeScript
// Configurazione cookie di sessione protetti
const sessionCookieOptions = {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
sameSite: 'strict' as const,
maxAge: 3600 * 1000
};
Bash
# Audit delle vulnerabilità nelle dipendenze
npm audit --production
[ ] Meccanismi di hashing moderni: differenze operative tra Argon2id e bcrypt
[ ] Direttive essenziali di Content Security Policy (CSP)
[ ] Gestione del ciclo di vita dei token JWT e revoca delle sessioni
[x] Prevenzione SQL Injection con query parametrizzate
[x] Configurazione cookie sicuri HttpOnly e SameSite
OWASP Top 10 Web Application Security Risks
OWASP Cheat Sheet Series