
La sicurezza delle applicazioni web è diventata una questione decisiva per qualsiasi azienda presente online. I cyberattacchi si moltiplicano e si fanno più raffinati, mettendo a rischio i dati sensibili e la reputazione delle organizzazioni. Questo articolo raccoglie le buone pratiche per proteggere davvero le tue applicazioni web dalle minacce di oggi e di domani.
Capire le minacce principali
Gli attacchi più diffusi
Prima di entrare nelle soluzioni, conviene sapere quali sono i tipi di attacco che minacciano le applicazioni web:
- SQL injection: consiste nell’inserire codice malevolo nelle query SQL per manipolare il database.
- Cross-Site Scripting (XSS): l’attaccante inietta script malevoli in pagine web consultate da altri utenti.
- Attacchi a forza bruta: si tenta di indovinare le credenziali provando un numero enorme di combinazioni.
Come sono cambiate le minacce nel 2024
I cybercriminali adattano di continuo le loro tecniche. Nel 2024 si osserva una recrudescenza degli attacchi mirati e un uso sempre più frequente dell’intelligenza artificiale per automatizzare e affinare i tentativi di intrusione.
Le basi della messa in sicurezza di un’applicazione web
Costruire un’autenticazione solida
Un’autenticazione solida è la prima linea di difesa contro gli accessi non autorizzati.
- Hashing sicuro delle password: usa algoritmi di hashing moderni come bcrypt o Argon2 per salvare le password.
Esempio in PHP con password_hash() e password_verify():
// Hashing della password al momento della registrazione
$password = $_POST['password'];
$hashedPassword = password_hash($password, PASSWORD_ARGON2ID);
// Salva $hashedPassword nel database
// Verifica della password al momento del login
$storedHash = // Recupera l'hash salvato dal database
if (password_verify($_POST['password'], $storedHash)) {
// Password corretta
} else {
// Password errata
}- Autenticazione a più fattori (2FA/MFA): aggiungi un livello di sicurezza in più chiedendo diverse forme di identificazione.
Gestione sicura delle sessioni
Metti in piedi i meccanismi che proteggono le sessioni utente:
- Genera identificatori di sessione casuali e complessi.
- Imponi una scadenza della sessione dopo un periodo di inattività.
- Usa cookie sicuri con gli attributi HttpOnly e Secure
// Configura le opzioni di sessione sicure
ini_set('session.cookie_httponly', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.cookie_secure', 1);
// Genera un nuovo ID di sessione a ogni login
session_regenerate_id(true);
// Imposta una durata di vita della sessione
ini_set('session.gc_maxlifetime', 3600); // 1 ora- Autenticazione a più fattori (2FA/MFA): aggiungi un livello di sicurezza in più chiedendo diverse forme di identificazione.
Validazione e sanificazione degli input utente
Ogni input dell’utente va considerato potenzialmente pericoloso:
- Valida con rigore tutti gli input lato server.
- Usa liste bianche per filtrare i caratteri ammessi.
- Fai l’escape dei dati prima di inserirli in una query SQL o nel codice HTML.
// Esempio di validazione e sanificazione di un indirizzo email
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
// L'email non è valida
}
// Esempio di protezione dalla SQL injection con query preparate
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->execute(['username' => $username]);
$user = $stmt->fetch();Protezione dei dati sensibili
Cifratura dei dati in transito e a riposo
La cifratura è indispensabile per proteggere le informazioni sensibili:
- Usa TLS 1.3 per proteggere le comunicazioni tra client e server.
- Cifra i dati sensibili salvati nel database.
// Cifratura
$plaintext = "Données sensibles à chiffrer";
$cipher = "aes-256-cbc";
$key = openssl_random_pseudo_bytes(32);
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipher));
$encrypted = openssl_encrypt($plaintext, $cipher, $key, 0, $iv);
// Decifratura
$decrypted = openssl_decrypt($encrypted, $cipher, $key, 0, $iv);Attivare HTTPS/SSL
HTTPS non è più un’opzione, è una necessità:
- Procurati un certificato SSL/TLS valido presso un’autorità di certificazione riconosciuta.
- Configura il server perché rediriga automaticamente tutto il traffico HTTP verso HTTPS.
# Rediriger HTTP vers HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Gestione sicura delle API
Le API sono spesso punti di ingresso critici:
- Richiedi un’autenticazione forte per accedere alle API.
- Limita il numero di richieste per prevenire gli abusi.
- Usa token JWT (JSON Web Tokens) per gestire in sicurezza le sessioni API.
-
- Definisci un processo sistematico per applicare le patch di sicurezza.
-
- Iscriviti ai bollettini di sicurezza dei fornitori dei software che usi.
Formazione e cultura della sicurezza
-
- Organizza sessioni di formazione regolari sulle tecniche di sicurezza più recenti.
-
- Insegna agli utenti le buone pratiche di sicurezza (password robuste, riconoscere il phishing, ecc.).
Conformità e standard di sicurezza
-
- Verifica che la tua applicazione web rispetti le normative in vigore (GDPR, PCI DSS, ecc.).
-
- Usa la Top 10 OWASP come riferimento per individuare e correggere le vulnerabilità più critiche.
Conclusione
Mettere in sicurezza un’applicazione web è un processo continuo che richiede attenzione costante. Adottando queste buone pratiche rafforzi in modo netto la protezione delle tue applicazioni contro le minacce di oggi e di domani.
-
- Esegui test di intrusione almeno una volta l’anno o dopo ogni modifica importante.
-
- Metti davanti all’applicazione un web application firewall (WAF) per bloccare molti attacchi noti.
-
- Configura avvisi sulle attività sospette.
-
- Conserva i log abbastanza a lungo da poter fare analisi forensi.
Gestione delle vulnerabilità e aggiornamenti
-
- Definisci un processo sistematico per applicare le patch di sicurezza.
-
- Iscriviti ai bollettini di sicurezza dei fornitori dei software che usi.
Formazione e cultura della sicurezza
-
- Organizza sessioni di formazione regolari sulle tecniche di sicurezza più recenti.
-
- Insegna agli utenti le buone pratiche di sicurezza (password robuste, riconoscere il phishing, ecc.).
Conformità e standard di sicurezza
-
- Verifica che la tua applicazione web rispetti le normative in vigore (GDPR, PCI DSS, ecc.).
-
- Usa la Top 10 OWASP come riferimento per individuare e correggere le vulnerabilità più critiche.
Conclusione
Mettere in sicurezza un’applicazione web è un processo continuo che richiede attenzione costante. Adottando queste buone pratiche rafforzi in modo netto la protezione delle tue applicazioni contro le minacce di oggi e di domani.
-
- Forma il tuo team sulle tecniche di programmazione sicura.
-
- Usa framework e librerie con una buona reputazione in fatto di sicurezza.
-
- Fai revisioni del codice regolari mirate alla sicurezza.
-
- Tieni un inventario aggiornato di tutte le dipendenze.
-
- Usa strumenti automatici per individuare le vulnerabilità nelle librerie di terze parti.
-
- Applica il principio della difesa in profondità mettendo in sicurezza ogni strato dell’infrastruttura.
Test e monitoraggio continuo
-
- Esegui test di intrusione almeno una volta l’anno o dopo ogni modifica importante.
-
- Metti davanti all’applicazione un web application firewall (WAF) per bloccare molti attacchi noti.
-
- Configura avvisi sulle attività sospette.
-
- Conserva i log abbastanza a lungo da poter fare analisi forensi.
Gestione delle vulnerabilità e aggiornamenti
-
- Definisci un processo sistematico per applicare le patch di sicurezza.
-
- Iscriviti ai bollettini di sicurezza dei fornitori dei software che usi.
Formazione e cultura della sicurezza
-
- Organizza sessioni di formazione regolari sulle tecniche di sicurezza più recenti.
-
- Insegna agli utenti le buone pratiche di sicurezza (password robuste, riconoscere il phishing, ecc.).
Conformità e standard di sicurezza
-
- Verifica che la tua applicazione web rispetti le normative in vigore (GDPR, PCI DSS, ecc.).
-
- Usa la Top 10 OWASP come riferimento per individuare e correggere le vulnerabilità più critiche.
Conclusione
Mettere in sicurezza un’applicazione web è un processo continuo che richiede attenzione costante. Adottando queste buone pratiche rafforzi in modo netto la protezione delle tue applicazioni contro le minacce di oggi e di domani.
function hasPermission($userId, $action) {
$userRole = getUserRole($userId); // Funzione per ottenere il ruolo dell'utente
$permissions = [
'admin' => ['read', 'write', 'delete'],
'editor' => ['read', 'write'],
'viewer' => ['read']
];
return in_array($action, $permissions[$userRole] ?? []);
}
// Uso
if (hasPermission($userId, 'write')) {
// Autorizza l'azione di scrittura
} else {
// Nega l'accesso
}Sicurezza del codice e dell’infrastruttura
-
- Forma il tuo team sulle tecniche di programmazione sicura.
-
- Usa framework e librerie con una buona reputazione in fatto di sicurezza.
-
- Fai revisioni del codice regolari mirate alla sicurezza.
-
- Tieni un inventario aggiornato di tutte le dipendenze.
-
- Usa strumenti automatici per individuare le vulnerabilità nelle librerie di terze parti.
-
- Applica il principio della difesa in profondità mettendo in sicurezza ogni strato dell’infrastruttura.
Test e monitoraggio continuo
-
- Esegui test di intrusione almeno una volta l’anno o dopo ogni modifica importante.
-
- Metti davanti all’applicazione un web application firewall (WAF) per bloccare molti attacchi noti.
-
- Configura avvisi sulle attività sospette.
-
- Conserva i log abbastanza a lungo da poter fare analisi forensi.
Gestione delle vulnerabilità e aggiornamenti
-
- Definisci un processo sistematico per applicare le patch di sicurezza.
-
- Iscriviti ai bollettini di sicurezza dei fornitori dei software che usi.
Formazione e cultura della sicurezza
-
- Organizza sessioni di formazione regolari sulle tecniche di sicurezza più recenti.
-
- Insegna agli utenti le buone pratiche di sicurezza (password robuste, riconoscere il phishing, ecc.).
Conformità e standard di sicurezza
-
- Verifica che la tua applicazione web rispetti le normative in vigore (GDPR, PCI DSS, ecc.).
-
- Usa la Top 10 OWASP come riferimento per individuare e correggere le vulnerabilità più critiche.
Conclusione
Mettere in sicurezza un’applicazione web è un processo continuo che richiede attenzione costante. Adottando queste buone pratiche rafforzi in modo netto la protezione delle tue applicazioni contro le minacce di oggi e di domani.
Controllo degli accessi e autorizzazioni
Principio del privilegio minimo
Concedi a ogni utente o processo solo i diritti necessari a portare a termine i suoi compiti.
Definire una politica di controllo degli accessi efficace
Esempio semplice di controllo degli accessi basato sui ruoli:
function hasPermission($userId, $action) {
$userRole = getUserRole($userId); // Funzione per ottenere il ruolo dell'utente
$permissions = [
'admin' => ['read', 'write', 'delete'],
'editor' => ['read', 'write'],
'viewer' => ['read']
];
return in_array($action, $permissions[$userRole] ?? []);
}
// Uso
if (hasPermission($userId, 'write')) {
// Autorizza l'azione di scrittura
} else {
// Nega l'accesso
}Sicurezza del codice e dell’infrastruttura
-
- Forma il tuo team sulle tecniche di programmazione sicura.
-
- Usa framework e librerie con una buona reputazione in fatto di sicurezza.
-
- Fai revisioni del codice regolari mirate alla sicurezza.
-
- Tieni un inventario aggiornato di tutte le dipendenze.
-
- Usa strumenti automatici per individuare le vulnerabilità nelle librerie di terze parti.
-
- Applica il principio della difesa in profondità mettendo in sicurezza ogni strato dell’infrastruttura.
Test e monitoraggio continuo
-
- Esegui test di intrusione almeno una volta l’anno o dopo ogni modifica importante.
-
- Metti davanti all’applicazione un web application firewall (WAF) per bloccare molti attacchi noti.
-
- Configura avvisi sulle attività sospette.
-
- Conserva i log abbastanza a lungo da poter fare analisi forensi.
Gestione delle vulnerabilità e aggiornamenti
-
- Definisci un processo sistematico per applicare le patch di sicurezza.
-
- Iscriviti ai bollettini di sicurezza dei fornitori dei software che usi.
Formazione e cultura della sicurezza
-
- Organizza sessioni di formazione regolari sulle tecniche di sicurezza più recenti.
-
- Insegna agli utenti le buone pratiche di sicurezza (password robuste, riconoscere il phishing, ecc.).
Conformità e standard di sicurezza
-
- Verifica che la tua applicazione web rispetti le normative in vigore (GDPR, PCI DSS, ecc.).
-
- Usa la Top 10 OWASP come riferimento per individuare e correggere le vulnerabilità più critiche.
Conclusione
Mettere in sicurezza un’applicazione web è un processo continuo che richiede attenzione costante. Adottando queste buone pratiche rafforzi in modo netto la protezione delle tue applicazioni contro le minacce di oggi e di domani.
function generateToken($userId) {
$payload = [
'user_id' => $userId,
'exp' => time() + 3600 // Scade tra 1 ora
];
return jwt_encode($payload, 'votre_clé_secrète');
}
function verifyToken($token) {
try {
$payload = jwt_decode($token, 'votre_clé_secrète');
if ($payload->exp < time()) {
return false; // Token scaduto
}
return $payload->user_id;
} catch (Exception $e) {
return false; // Token non valido
}
}
// Uso in una rotta API
$token = getBearerToken(); // Funzione per estrarre il token dall'header
$userId = verifyToken($token);
if ($userId === false) {
http_response_code(401);
echo json_encode(['error' => 'Unauthorized']);
exit;
}
// Prosegui con l'elaborazione della richiesta APIControllo degli accessi e autorizzazioni
Principio del privilegio minimo
Concedi a ogni utente o processo solo i diritti necessari a portare a termine i suoi compiti.
Definire una politica di controllo degli accessi efficace
Esempio semplice di controllo degli accessi basato sui ruoli:
function hasPermission($userId, $action) {
$userRole = getUserRole($userId); // Funzione per ottenere il ruolo dell'utente
$permissions = [
'admin' => ['read', 'write', 'delete'],
'editor' => ['read', 'write'],
'viewer' => ['read']
];
return in_array($action, $permissions[$userRole] ?? []);
}
// Uso
if (hasPermission($userId, 'write')) {
// Autorizza l'azione di scrittura
} else {
// Nega l'accesso
}Sicurezza del codice e dell’infrastruttura
-
- Forma il tuo team sulle tecniche di programmazione sicura.
-
- Usa framework e librerie con una buona reputazione in fatto di sicurezza.
-
- Fai revisioni del codice regolari mirate alla sicurezza.
-
- Tieni un inventario aggiornato di tutte le dipendenze.
-
- Usa strumenti automatici per individuare le vulnerabilità nelle librerie di terze parti.
-
- Applica il principio della difesa in profondità mettendo in sicurezza ogni strato dell’infrastruttura.
Test e monitoraggio continuo
-
- Esegui test di intrusione almeno una volta l’anno o dopo ogni modifica importante.
-
- Metti davanti all’applicazione un web application firewall (WAF) per bloccare molti attacchi noti.
-
- Configura avvisi sulle attività sospette.
-
- Conserva i log abbastanza a lungo da poter fare analisi forensi.
Gestione delle vulnerabilità e aggiornamenti
-
- Definisci un processo sistematico per applicare le patch di sicurezza.
-
- Iscriviti ai bollettini di sicurezza dei fornitori dei software che usi.
Formazione e cultura della sicurezza
-
- Organizza sessioni di formazione regolari sulle tecniche di sicurezza più recenti.
-
- Insegna agli utenti le buone pratiche di sicurezza (password robuste, riconoscere il phishing, ecc.).
Conformità e standard di sicurezza
-
- Verifica che la tua applicazione web rispetti le normative in vigore (GDPR, PCI DSS, ecc.).
-
- Usa la Top 10 OWASP come riferimento per individuare e correggere le vulnerabilità più critiche.
Conclusione
Mettere in sicurezza un’applicazione web è un processo continuo che richiede attenzione costante. Adottando queste buone pratiche rafforzi in modo netto la protezione delle tue applicazioni contro le minacce di oggi e di domani.


