Secure Coding — Cheat Sheet

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.

Concetti chiave

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.

Domande tipiche e risposte pronte

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.

Insidie e errori comuni

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.

Snippet e comandiTypeScript

// 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

Da ripassare

[ ] 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

Riferimenti

OWASP Top 10 Web Application Security Risks

OWASP Cheat Sheet Series

Jarvis Interviews
Jarvis