Modulo 11 – Autenticazione Web, Sessioni e Sicurezza Web | Corso HTML Megistone 2025




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.

Autenticazione web sicura con sessioni e token JWT
Proteggere l’accesso al sito: autenticazione web, sessioni e sicurezza applicativa.

🎯 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 ....
Quando scegliere? Siti classici e CMS → sessione; API e SPA → JWT.

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';
Attenzione: evita qualsiasi JavaScript inline non strettamente necessario.

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:

📘 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.