Modulo 11 – Autenticazione Web, Sessioni e Sicurezza Web
Autenticazione web significa garantire che solo gli utenti autorizzati possano accedere alle aree riservate di un sito o di un’applicazione. In questo modulo imparerai come gestire sessioni PHP sicure, implementare token JWT, prevenire attacchi come CSRF e XSS e rafforzare la sicurezza complessiva del back-end.

🎯 Obiettivi Didattici
- Comprendere i principi dell’autenticazione web e delle sessioni sicure.
- Implementare login e logout con validazione server-side.
- Proteggere le form con token CSRF e sanificare l’output contro XSS.
- Applicare cookie sicuri (
HttpOnly,SameSite,Secure). - Integrare 2FA (autenticazione a due fattori) e header di sicurezza.
1️⃣ Autenticazione Web: sessioni e token
Esistono due principali strategie di autenticazione web:
- Session-based: il server conserva le informazioni dell’utente in memoria o database, legate a un cookie di sessione (
PHPSESSID). - Token-based (JWT): il server rilascia un token firmato che il client invia in
Authorization: Bearer ....
2️⃣ Sicurezza delle sessioni PHP
<?php
ini_set('session.cookie_httponly',1);
ini_set('session.cookie_secure',1);
ini_set('session.cookie_samesite','Lax');
session_start();
?>
Rigenera l’ID sessione dopo il login per prevenire session fixation e imposta cookie con flag di sicurezza.
3️⃣ Esempio di Login Sicuro (PHP + PDO)
<?php
require 'db.php'; session_start();
$email=$_POST['email']??''; $pass=$_POST['password']??'';
$stmt=$pdo->prepare('SELECT id,pass_hash,role FROM users WHERE email=?');
$stmt->execute([$email]);
$u=$stmt->fetch(PDO::FETCH_ASSOC);
if(!$u || !password_verify($pass,$u['pass_hash'])){http_response_code(401);exit('Credenziali errate');}
session_regenerate_id(true);
$_SESSION['uid']=$u['id']; $_SESSION['role']=$u['role'];
echo 'Login OK';
?>
4️⃣ Protezione CSRF
<?php
if(empty($_SESSION['csrf'])) $_SESSION['csrf']=bin2hex(random_bytes(32));
echo "<input type='hidden' name='csrf' value='{$_SESSION['csrf']}'>";
if(!hash_equals($_SESSION['csrf']??'',$_POST['csrf']??'')) die('CSRF');
?>
5️⃣ XSS e Content Security Policy
Ogni input utente deve essere sanificato con htmlspecialchars(). Aggiungi nel server:
Content-Security-Policy:
default-src 'self';
script-src 'self';
style-src 'self' 'unsafe-inline';
img-src 'self' https: data:;
object-src 'none';
6️⃣ SQL Injection
L’autenticazione web deve sempre usare query parametrizzate. Con PDO:
$stmt = $pdo->prepare("SELECT * FROM users WHERE email=?");
$stmt->execute([$email]);
7️⃣ Rate Limit e Blocchi
Blocca dopo 5 tentativi falliti in 15 minuti e usa ritardi progressivi. Questo difende da attacchi brute force.
8️⃣ Ruoli e Autorizzazione
function requireRole($r){
if(!isset($_SESSION['role']) || $_SESSION['role']!==$r){
http_response_code(403); exit('Accesso negato');
}
}
requireRole('admin');
9️⃣ Autenticazione JWT (API)
JWT codifica un payload con ID utente e ruolo:
$payload=['sub'=>$u['id'],'role'=>$u['role'],'exp'=>time()+3600];
$jwt=JWT::encode($payload,$key,'HS256');
🔟 Autenticazione a Due Fattori (2FA)
La 2FA rafforza l’autenticazione web generando un codice TOTP di 30 secondi su app come Google Authenticator. Dopo login e password, l’utente inserisce il codice per completare l’accesso.
🔐 Reset Password Sicuro
Usa token monouso validi 15–30 minuti e invalida tutte le sessioni dopo il reset.
🧱 Header di Sicurezza Consigliati
Strict-Transport-Security: max-age=31536000
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()
⚙️ Integrazione WordPress
Usa i nonce per le form e funzioni sanitize_text_field ed esc_html per filtrare i dati.
Esempio:
<?php wp_nonce_field('my_login','my_nonce'); ?>
💻 Mini-Progetto: Area Riservata Docenti/Studenti
Costruisci un sistema completo di autenticazione web con ruoli, registrazione, login, CRUD materiali e protezioni CSRF/XSS.
Usa cookie sicuri e log audit per verificare accessi e modifiche.
🔗 Approfondimenti e risorse
Per un quadro completo sulla autenticazione web e la sicurezza delle applicazioni, consulta anche:
- OWASP Authentication Cheat Sheet
- MDN Web Docs – Sicurezza Web
- Modulo 10 – Architettura Back-End e Comunicazione Client-Server
- Modulo 6 – Form Dinamici con JavaScript
📘 Approfondimento finale: perché l’autenticazione web è fondamentale
L’autenticazione web non serve solo a proteggere un sito da intrusioni: è il punto di partenza per ogni strategia di sicurezza informatica moderna.
In un contesto dove API, applicazioni mobile e sistemi distribuiti scambiano dati sensibili, una corretta gestione di sessioni, cookie e token riduce drasticamente il rischio di violazioni.
Ogni sviluppatore dovrebbe padroneggiare i principi dell’autenticazione web per costruire progetti scalabili, affidabili e conformi agli standard di sicurezza 2025.
🔍 Conclusione estesa
In definitiva, l’autenticazione web rappresenta una delle competenze più importanti per chiunque sviluppi applicazioni moderne.
Padroneggiare le tecniche di validazione, gestione delle sessioni, token JWT e difesa da attacchi informatici significa creare siti più affidabili, professionali e sicuri.
Investire tempo nello studio dell’autenticazione web è un passo concreto verso la realizzazione di progetti digitali di qualità e conformi agli standard internazionali.