Gennaio 17, 2025

SQL Injection in PHP: Cos’è e A Cosa Serve?

Introduzione

La SQL Injection è una delle vulnerabilità più comuni e pericolose per le applicazioni web. Si verifica quando un utente malintenzionato riesce a manipolare le query SQL che vengono eseguite sul database di un’applicazione, inserendo in esse codice dannoso.

Spiegazione

La SQL Injection avviene quando un’applicazione web accetta input dall’utente e lo inserisce direttamente in una query SQL senza una corretta validazione o sanificazione. Questo permette a un attaccante di inserire comandi SQL arbitrari, che possono essere eseguiti sul database. I rischi includono accesso non autorizzato ai dati, manipolazione dei dati e, in alcuni casi, il controllo completo del server.

Quando si utilizza

La SQL Injection viene sfruttata principalmente quando le applicazioni web non gestiscono correttamente l’input dell’utente. Questo può accadere in moduli di login, campi di ricerca, commenti o qualsiasi altro punto in cui l’utente può inserire dati che vengono successivamente utilizzati in una query SQL.

Esempi

Esempio di SQL Injection in PHP

Consideriamo un semplice esempio in cui un’applicazione PHP utilizza l’input dell’utente per eseguire una query SQL senza alcun controllo:

$username = $_GET['username'];
$password = $_GET['password'];

$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, $query);

In questo esempio, un attaccante potrebbe inserire un input dannoso come ' OR '1'='1 per bypassare l’autenticazione.

Soluzione: Utilizzo delle Prepared Statements

Per prevenire la SQL Injection, è consigliabile utilizzare le Prepared Statements. Ecco come possiamo riscrivere la query precedente in modo sicuro:

$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$result = $stmt->get_result();

In questo modo, i parametri vengono passati separatamente dalla query SQL, impedendo che l’input dell’utente possa alterare la struttura della query stessa.

Utilizzare tecniche di validazione e sanificazione dell’input, insieme alle Prepared Statements, è essenziale per proteggere le applicazioni web da attacchi di SQL Injection.

Giorgio

Sono un Web Developer con oltre 20 anni di esperienza nello sviluppo di applicazioni web complesse. Specializzato in PHP, gestione di database relazionali e non relazionali, e integrazione di API, realizzo soluzioni robuste e scalabili per soddisfare esigenze aziendali e tecniche. Mi occupo di architetture server-side, ottimizzazione delle performance e automazione dei processi.
PHP News
Panoramica privacy

Questo Sito utilizza alcuni tipi di cookie tecnici necessari per il corretto funzionamento dello stesso, nonché cookie statistici e di profilazione anche di terze parti. Se vuoi saperne di più o negare il consenso a tutti o solo ad alcuni cookie consulta la Cookie Policy.