---
title: "Essenziali di sicurezza: rate limit, header CSP, cifratura di chiavi, audit pre-pubblici di repo"
description: "Applicare le misure di sicurezza centrali perche la tua app resista all'abuso e non faccia mai trapelare dati sensibili"
type: "lesson"
locale: "it"
course: "Qualità, sicurezza e il business agent-first"
number: "5.2"
canonical: "https://agenticschool.dev/it/corsi/quality-security-agent-first/security-essentials-rate-limits-csp-headers-key-encryption-pre-public-repo-audits"
datePublished: "2026-06-12"
dateModified: "2026-06-12"
---

# Essenziali di sicurezza: rate limit, header CSP, cifratura di chiavi, audit pre-pubblici di repo

- Course: Qualità, sicurezza e il business agent-first
- Lesson: 5.2
- Duration: 26 min
- Level: technik
- Status: published
- Canonical URL: https://agenticschool.dev/it/corsi/quality-security-agent-first/security-essentials-rate-limits-csp-headers-key-encryption-pre-public-repo-audits
- Locale: it

> Applicare le misure di sicurezza centrali perche la tua app resista all'abuso e non faccia mai trapelare dati sensibili

## Summary

La sicurezza non e opzionale appena arrivano veri utenti. Questa lezione copre gli essenziali di cui ogni app ha bisogno: rate limit su ogni endpoint pubblico, una Content Security Policy per indurire il browser, la cifratura delle credential memorizzate, gli audit log e una checklist pre-pubblica perche un repo non passi mai in pubblico con un segreto sepolto nella sua cronologia.

## What you learn

- Rate-limitare ogni endpoint pubblico per fermare il brute force, lo spam e l'abuso che gonfia la fattura
- Gli header CSP, cifrare le credential memorizzate e tenere un audit log
- Una checklist pre-pubblica di repo perche i segreti della cronologia non diventino mai pubblici

## Panoramica

Nell'istante in cui la tua app e su Internet, e sondata da bot in pochi minuti. Non hai bisogno di una squadra di sicurezza per essere sicuro contro gli attacchi comuni, hai bisogno di un pugno di essenziali, applicati sistematicamente: limita ogni endpoint pubblico con un rate limit, blocca con una CSP cio che il browser eseguira, cifra le credential che memorizzi, logga chi ha fatto cosa, e non passare mai un repo in pubblico senza auditare la sua cronologia per i segreti. Questa lezione rende ciascuno concreto.

## Cosa imparerai

Imparerai ad aggiungere rate limit agli endpoint pubblici, a porre un header Content Security Policy, a cifrare le credential memorizzate a riposo, a tenere un audit log utile e a far girare un audit pre-pubblico di repo che coglie i segreti nascosti in vecchi commit. Sono le misure che separano un progetto hobbistico da qualcosa su cui puoi responsabilmente dirigere veri utenti.

## Prerequisiti

Le lezioni sui segreti dei Corsi 1 e 3, perche piu misure qui si appoggiano sul tenere i segreti nelle variabili d'ambiente e fuori dal codice. Un'app in deploy con almeno un endpoint o form pubblico rende la lezione concreta, ma puoi applicare tutto al tuo prossimo progetto dal primo commit.

## Il problema

Tre omissioni nuocciono ai piccoli builder ancora e ancora. Primo: un endpoint non protetto si fa martellare - un form di login brute-forcato, un form di contatto spammato o un endpoint di IA chiamato in loop finche la tua fattura fornitore esplode. Secondo: una chiave API o una password memorizzata siede in chiaro, cosicche una sola fuga di database da a un attaccante tutto in una volta. Terzo, e il piu frequente: un fondatore rende un repo pubblico per condividerlo, e un segreto committato due anni fa e ora per sempre su Internet aperto. Ognuno e evitabile con un'abitudine.

## Rate-limita ogni endpoint pubblico

Un rate limit limita quante volte un solo client puo toccare un endpoint in una finestra di tempo. E il controllo di sicurezza meno caro e al piu alto rendimento che hai, e ogni endpoint che uno sconosciuto puo raggiungere ne ha bisogno di uno: login, signup, reset di password, form di contatto e soprattutto ogni endpoint che ti costa denaro per chiamata, come uno che innesca un LLM. Limita per IP per il traffico anonimo e per utente o chiave API per il traffico autenticato. Quando il limite e superato, restituisci un 429 e fermati.

```typescript
// Un limiter a finestra fissa minimale. In produzione, usa uno store condiviso
// (Redis, Upstash o il tuo DB) perche funzioni su piu server.
const hits = new Map<string, { count: number; resetAt: number }>()

export function rateLimit(key: string, max = 10, windowMs = 60_000) {
  const now = Date.now()
  const entry = hits.get(key)
  if (!entry || now > entry.resetAt) {
    hits.set(key, { count: 1, resetAt: now + windowMs })
    return { ok: true }
  }
  if (entry.count >= max) return { ok: false, retryAfter: entry.resetAt - now }
  entry.count += 1
  return { ok: true }
}

// Nel tuo handler :
// const limit = rateLimit(`login:${ip}`, 5, 60_000)
// if (!limit.ok) return new Response('Too many requests', { status: 429 })
```
Un abbozzo di rate limiter - limita per IP per il traffico anonimo, per utente o chiave per l'autenticato

## Header CSP e cifrare le credential memorizzate

Una Content Security Policy dice al browser esattamente quali fonti ha il diritto di caricare per script, stili e immagini. E la tua difesa piu forte contro il cross-site scripting: anche se un attaccante inietta un tag script, il browser rifiuta di eseguirlo perche la fonte non e sulla tua allowlist. Parti stretto e allenta solo cio che devi. Separatamente, tutto cio che memorizzi di sensibile - una chiave API di terzi, un token OAuth, un segreto utente - deve essere cifrato a riposo, perche un'intrusione in database consegni testo cifrato, non credential funzionanti. La chiave di cifratura stessa vive in una variabile d'ambiente, mai nel database che protegge.

```text
Content-Security-Policy: default-src 'self';
  script-src 'self';
  style-src 'self' 'unsafe-inline';
  img-src 'self' data: https:;
  connect-src 'self' https://api.your-provider.com;
  frame-ancestors 'none';
  base-uri 'self'
```
Una CSP di partenza - self per default, poi autorizzare solo cio di cui la tua app ha davvero bisogno

- default-src 'self' vuol dire: salvo indicazione contraria, caricare solo dal tuo dominio.
- connect-src controlla quali API il browser ha il diritto di chiamare - elenca solo i tuoi veri backend.
- frame-ancestors 'none' impedisce ad altri siti di incorporare la tua in un iframe (clickjacking).
- Cifra i segreti memorizzati con una libreria, non a mano; tieni la chiave in una env var, falla ruotare se un giorno trapela.

## Audit log: sapere chi ha fatto cosa

Quando qualcosa va male - un rimborso emesso, un account cancellato, un piano retrocesso - devi rispondere "chi l'ha fatto, quando e da dove". Un audit log e un record in append-only delle azioni sensibili: l'attore, l'azione, il target, un timestamp e l'IP sorgente. Non e la stessa cosa dei tuoi log applicativi; e una traccia deliberata per la sicurezza e la responsabilita. Logga ogni azione che sposta denaro, cambia permessi o tocca i dati di un altro utente. Non loggare mai i segreti stessi, solo che l'azione ha avuto luogo.

## La checklist pre-pubblica di repo

E quella che morde piu forte. Cancellare una chiave dal tuo commit piu recente non la toglie dalla cronologia - siede ancora in un vecchio commit che tutti possono leggere appena il repo passa in pubblico. Prima di passare un repo da privato a pubblico, percorri questa checklist ogni volta. Se trovi un segreto nella cronologia, la sola mossa sicura e trattare quel segreto come compromesso: fallo ruotare immediatamente, poi ripulisci la cronologia.

- Scansiona la cronologia completa per i segreti, non solo i file attuali. Usa uno strumento come gitleaks o trufflehog: gitleaks detect --source . coglie chiavi, token e password su ogni commit.
- Conferma che .env e ogni file di segreto sono in .gitignore e non sono mai stati committati.
- Verifica le chiavi in chiaro, gli URL interni, i dati clienti e le credential nel codice e nei commenti.
- Se un segreto e mai stato committato: fallo ruotare prima (supponilo gia pubblico), poi riscrivi la cronologia per toglierlo prima di passare in pubblico.
- Solo dopo una scansione pulita passi il repo in pubblico.

```bash
# Auditare tutta la cronologia Git per i segreti trapelati prima di passare in pubblico
gitleaks detect --source . --verbose

# Se qualcosa e trovato, FAI RUOTARE il segreto prima, poi ripulisci la cronologia.
```
Fai girare questo prima di ogni passaggio privato-verso-pubblico - la cronologia sopravvive a una cancellazione

## Errori frequenti

I ricorrenti: pubblicare un endpoint di IA o di e-mail senza rate limit e svegliarsi davanti a una fattura a cinque cifre; memorizzare i token di terzi in chiaro, cosicche una fuga compromette ogni account connesso; saltare la CSP perche e noiosa e poi ingoiare un XSS; e il classico - passare un repo in pubblico per "condividere il progetto" senza auditare la cronologia, e far trapelare una chiave che ci sta da mesi. Ognuno e evitato da un'abitudine di questa lezione.

## ROI business

La sicurezza e invisibile quando funziona e catastrofica quando non funziona. Una chiave trapelata puo svuotare un budget dall'oggi al domani, un'intrusione nelle credential memorizzate puo mettere fine a un'azienda, e una sola fuga di repo pubblico e costata ai fondatori denaro reale e veri clienti. Gli essenziali qui ti costano un pomeriggio da mettere in atto poi girano per sempre. Per una squadra pilotata da agente, cio conta doppio: gli agenti generano endpoint in fretta, quindi la disciplina "ogni endpoint pubblico riceve un rate limit, ogni segreto e cifrato, ogni repo e auditato" deve essere una regola che l'agente segue, non qualcosa che ricordi.

## Checklist

Conferma ognuno di questi punti prima di dirigere veri utenti su qualsiasi cosa tu abbia costruito.

- Ogni endpoint pubblico e costoso ha un rate limit che restituisce 429 in caso di superamento.
- Un header Content Security Policy e posto e stretto quanto la tua app permette.
- Le credential e i token memorizzati sono cifrati a riposo, la chiave in una env var.
- Hai fatto girare una scansione di segreti su tutta la cronologia prima di ogni repo pubblico e fatto ruotare tutto cio che e stato trovato.

## Risorse

Tieni gitleaks o trufflehog installato e aggiungi la scansione di cronologia al tuo rituale pre-pubblico. Il OWASP Top 10 e la reference CSP di MDN sono le fonti senza tempo quando hai bisogno di profondita. Metti "rate-limita questo endpoint" e "cifra questo segreto memorizzato" nelle tue regole di progetto, perche gli agenti le applichino senza che si chieda.

## La tua missione

Aggiungi un rate limit a un vero endpoint e conferma che restituisce 429 quando lo superi. Poni un header CSP sulla tua app e correggi cio che rompe, finche la pagina funziona sotto una policy stretta. Poi fai girare gitleaks contro uno dei tuoi repo e leggi l'output - anche un risultato pulito ti insegna a fidarti della verifica prima di passare un giorno in pubblico.

## Prossima lezione

Sicuro e indurito, la prossima lezione tratta il diritto e la conformita: GDPR, consenso cookie conforme incluso Global Privacy Control, e le leggi di protezione dei dati statunitensi e svizzere, spiegate senza mal di testa.

## Transcript

La sicurezza non e opzionale appena arrivano veri utenti. Questa lezione copre gli essenziali di cui ogni app ha bisogno: rate limit su ogni endpoint pubblico, una Content Security Policy per indurire il browser, la cifratura delle credential memorizzate, gli audit log e una checklist pre-pubblica perche un repo non passi mai in pubblico con un segreto sepolto nella sua cronologia.
