f in x
OWASP Top 10 2025: le vulnerabilità web più pericolose spiegate con esempi pratici in PHP e Laravel
> cd .. / HUB_EDITORIALE > Visualizza in Inglese
Analisi dei dati e metriche

OWASP Top 10 2025: le vulnerabilità web più pericolose spiegate con esempi pratici in PHP e Laravel

[2026-05-29] Author: Ing. Calogero Bono

Ogni applicazione web, indipendentemente dal framework o dal linguaggio, è esposta a rischi di sicurezza che possono compromettere dati, utenti e reputazione. La OWASP Top 10 è il riferimento più autorevole per identificare e mitigare le vulnerabilità critiche. Questa guida analizza ciascuna delle dieci categorie di rischio, fornendo esempi concreti in PHP puro e nel framework Laravel. L'obiettivo è trasformare la consapevolezza in azione, con codice sicuro e best practice pronte all'uso.

Che cos'è la OWASP Top 10 e perché è ancora rilevante

La OWASP (Open Web Application Security Project) pubblica periodicamente un elenco delle dieci vulnerabilità più diffuse e pericolose per le applicazioni web. Questo documento è il punto di partenza per qualsiasi programma di sicurezza applicativa. Ignorare queste categorie equivale a lasciare aperte le porte a data breach, iniezioni di codice e furto di identità. Per uno sviluppatore PHP e Laravel, conoscere e prevenire questi rischi è un dovere professionale.

Struttura della guida

Per ogni vulnerabilità vengono presentati: una descrizione sintetica del rischio, un esempio vulnerabile in PHP puro, la versione corretta e sicura, e infine la controparte in Laravel (quando applicabile).

A01:2025 – Broken Access Control

Il controllo degli accessi difettoso si verifica quando un utente può eseguire azioni o visualizzare dati al di fuori dei propri permessi. È la vulnerabilità più comune.

Esempio vulnerabile in PHP


<?php
// profile.php?id=5
$userId = $_GET['id'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$userId]);
$user = $stmt->fetch();
// Nessun controllo: qualsiasi utente può vedere i dati di qualunque altro

Correzione in PHP


<?php
session_start();
$currentUserId = $_SESSION['user_id'];
$requestedUserId = (int) $_GET['id'];

if ($requestedUserId !== $currentUserId && !in_array('admin', $_SESSION['roles'])) {
    http_response_code(403);
    exit('Accesso negato');
}

$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$requestedUserId]);
$user = $stmt->fetch();

Laravel: Policy e Gates


// App\Policies\UserPolicy
public function view(User $authenticatedUser, User $targetUser)
{
    return $authenticatedUser->id === $targetUser->id
        || $authenticatedUser->hasRole('admin');
}

// Nel controller
public function show(User $user)
{
    $this->authorize('view', $user);
    return view('users.show', compact('user'));
}

A02:2025 – Cryptographic Failures

Protezione insufficiente dei dati sensibili in transito e a riposo. Include l'uso di algoritmi deboli, chiavi hardcoded e trasmissioni non cifrate.

Esempio vulnerabile in PHP


// Memorizzare password in MD5
$hashed = md5($password); // Assolutamente da evitare

Soluzione moderna


$hashed = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
$verified = password_verify($inputPassword, $storedHash);

Laravel: crittografia automatica

Laravel utilizza bcrypt di default per le password e fornisce il facade Crypt per cifrare dati sensibili con AES-256.


use Illuminate\Support\Facades\Crypt;

$encrypted = Crypt::encryptString('dato sensibile');
$decrypted = Crypt::decryptString($encrypted);

A03:2025 – Injection

Attacchi di injection (SQL, NoSQL, OS Command, LDAP) si verificano quando dati non fidati vengono inviati a un interprete come parte di un comando. È una delle vulnerabilità più antiche e ancora molto diffusa.

Esempio vulnerabile in PHP


$query = "SELECT * FROM products WHERE id = " . $_GET['id'];
$result = mysqli_query($conn, $query);

Correzione con Prepared Statements


$stmt = $pdo->prepare("SELECT * FROM products WHERE id = ?");
$stmt->execute([$_GET['id']]);

Laravel Eloquent e Query Builder


// Eloquent (ORM) – protetto di default
$product = Product::find($request->id);

// Query Builder – parametri vincolati
$products = DB::table('products')->where('id', $request->id)->get();

A04:2025 – Insecure Design

Riguarda errori architetturali che rendono l'applicazione vulnerabile ancor prima della scrittura del codice. Esempi: mancanza di rate limiting, trust su dati client-side, logica di business non sicura.

Esempio in PHP


// Il prezzo arriva dal form nascosto – fidarsi è pericoloso
$prezzo = $_POST['prezzo_hidden'];

Soluzione: validazione lato server


$prezzoCorretto = calcolaPrezzoDalDatabase($productId);
if ($prezzoInviato !== $prezzoCorretto) {
    // Respingi
}

Laravel: Form Request + Policy

Usare Form Request per validare input e Policy per autorizzare azioni.

A05:2025 – Security Misconfiguration

Configurazioni errate a livello di server, framework, librerie o cloud. Include permessi di default, directory listing abilitato, stack trace esposti.

Esempio in Laravel

Non rimuovere la variabile APP_DEBUG=true in produzione espone errori dettagliati.


// .env in produzione
APP_DEBUG=false

Best practice generali

  • Disabilitare directory listing nel webserver (Apache: Options -Indexes; Nginx: autoindex off;)
  • Utilizzare HTTPS forzato
  • Mantenere aggiornati framework e librerie

A06:2025 – Vulnerable and Outdated Components

Usare pacchetti con vulnerabilità note. Strumenti come composer audit e Dependabot aiutano a rilevarle.

Controllo in Laravel


composer audit

Integrare Dependabot su GitHub per aggiornamenti automatici.

A07:2025 – Identification and Authentication Failures

Meccanismi di autenticazione deboli: sessioni prevedibili, mancanza di MFA, password policy insufficienti.

Esempio vulnerabile in PHP


session_start();
if (!isset($_SESSION['user_id'])) {
    // login bypassabile?
}

Laravel: autenticazione robusta

Laravel implementa guard multiple, rate limiting sui login e supporta nativamente multi-factor authentication con pacchetti come larage.


// config/auth.php – già sicuro di default
'password' => ['min:8', 'mixedCase', 'symbols'],

A08:2025 – Software and Data Integrity Failures

Mancata verifica dell'integrità di software o dati. Include aggiornamenti non firmati, dipendenze non verificate, CI/CD non sicuri.

Esempio: pacchetti Composer malevoli

Verificare le firme nei composer.lock e usare solo repository attendibili.

Laravel: firma dei pacchetti

Utilizzare composer verify e abilitare secure-by-default per i pacchetti first-party.

A09:2025 – Security Logging and Monitoring Failures

Assenza di logging sufficiente per rilevare attacchi in corso. Un attacco senza tracce è invisibile.

Implementazione in Laravel


// In un middleware
Log::warning('Tentativo di accesso non autorizzato', ['user' => $user->id, 'ip' => $request->ip()]);

Configurare alerting su canali Slack, email o strumenti come Sentry.

A10:2025 – Server-Side Request Forgery (SSRF)

SSRF permette a un attacker di forzare il server a effettuare richieste verso risorse interne, come cloud metadata o servizi interni.

Esempio vulnerabile in PHP


$url = $_GET['url'];
$content = file_get_contents($url);

Mitigazione in Laravel

Validare e whitelistare URL, usare Http::fake() in test, e limitare i protocolli consentiti.


use Illuminate\Support\Facades\Http;

$response = Http::timeout(5)->get('https://api.example.com');

Conclusione e best practices

La sicurezza non è un'opzione, ma un requisito fondamentale. Integrare le difese descritte in questa guida riduce drasticamente il rischio di incidenti. Ecco i passi concreti da seguire:

  • Adotta OWASP ASVS (Application Security Verification Standard) come checklist.
  • Esegui scan automatici con strumenti come Wapiti o Burp Suite.
  • Formatà il team con sessioni periodiche di secure coding.
  • Mantieni aggiornate dipendenze e framework.
  • Integra test di sicurezza automatici nella pipeline CI/CD.

Per approfondire il contesto generale della sicurezza nelle applicazioni web, consulta la Guida Definitiva alla Cybersecurity per Sviluppatori Web.

Risorse esterne autorevoli: OWASP Top 10 ufficiale.

Sponsored Protocol

Ing. Calogero Bono

> AUTHOR_EXTRACTED

Ing. Calogero Bono

Co-founder di Meteora Web. Ingegnere informatico, sviluppo ecosistemi digitali ad alte prestazioni. AI, automazione, SEO tecnica e infrastrutture web. Scrivo di tecnologia per rendere complesso… semplice.

[ Read Full Dossier ]

Hai bisogno di applicare questa strategia?

Esegui il protocollo di contatto per iniziare un progetto con noi.

> INIZIA_PROGETTO

Sponsored

> MW_JOURNAL

> READ_ALL()