Implementare la protezione CSRF in PHP da zero

La protezione CSRF (Cross-Site Request Forgery) è una misura di sicurezza fondamentale per prevenire che attori malevoli inducano un utente autenticato a eseguire azioni indesiderate su un'applicazione web. Questo articolo illustra come implementare una semplice ma efficace protezione CSRF utilizzando PHP nativo.

1. Cos'è un token CSRF?

Un token CSRF è una stringa casuale generata dal server e associata alla sessione dell'utente. Viene inserito in ogni form HTML che effettua una richiesta pericolosa (POST, PUT, DELETE) e verificato dal server alla ricezione della richiesta.

2. Generazione del token

All'inizio della sessione, generiamo un token CSRF e lo memorizziamo nella sessione:


session_start();

if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

3. Inclusione del token nel form

Ogni form HTML che effettua una richiesta sensibile deve includere il token come campo nascosto:


<form method="POST" action="processa.php">
    <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($_SESSION['csrf_token']) ?>">
    <input type="text" name="dati">
    <button type="submit">Invia</button>
</form>

4. Verifica del token

Nel file che riceve la richiesta (es. processa.php), il token va verificato prima di eseguire qualsiasi azione:


session_start();

if (!isset($_POST['csrf_token'], $_SESSION['csrf_token']) ||
    !hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
    http_response_code(403);
    echo "Token CSRF non valido.";
    exit;
}

// Eseguire le operazioni sicure
$dati = $_POST['dati'];

5. Considerazioni finali

  • Utilizzare hash_equals() per evitare attacchi di timing.
  • Rigenerare il token dopo azioni critiche può aumentare la sicurezza.
  • Applicare questa protezione a tutte le azioni che modificano lo stato sul server.

Questa implementazione manuale fornisce una base solida per difendersi dagli attacchi CSRF in PHP. In ambienti complessi o framework, è consigliabile utilizzare soluzioni integrate.

Torna su