Vai al contenuto

Prossima Edizione del Bootcamp
4 maggio 2026

SQL Injection

Un attacco di code injection che sfrutta vulnerabilita nelle applicazioni web inserendo statement SQL malevoli nei campi di input, permettendo agli attaccanti di manipolare database, accedere a dati non autorizzati o eseguire operazioni amministrative.

Autore
Unihackers Team
Tempo di lettura
4 min di lettura
Ultimo aggiornamento

Perche e Importante

La SQL injection si e costantemente classificata tra le vulnerabilita delle applicazioni web piu critiche per oltre due decenni. Nonostante sia ben compresa e prevenibile, la SQLi continua ad affliggere le applicazioni, abilitando data breach che espongono milioni di record.

L'impatto della SQL injection va ben oltre il semplice accesso ai dati. Gli attacchi riusciti possono:

  • Estrarre interi database incluse password e informazioni personali
  • Modificare o eliminare dati, causando disruption operativa
  • Bypassare l'autenticazione e impersonare utenti
  • Eseguire comandi sul server sottostante
  • Pivotare per attaccare sistemi di rete interni

Alcune delle violazioni di dati piu grandi della storia sono risultate da SQL injection, inclusi incidenti che hanno colpito grandi rivenditori, agenzie governative e aziende tecnologiche. La continua prevalenza di questa vulnerabilita riflette sia problemi di codice legacy che fallimenti continui nelle pratiche di sviluppo sicuro.

Per i professionisti della sicurezza, la SQL injection serve come area di competenza fondamentale. I web application penetration tester devono identificare e sfruttare queste vulnerabilita; gli sviluppatori devono scrivere codice sicuro; e i security engineer devono implementare controlli difensivi che catturino cio che lo sviluppo manca.

Come Funziona la SQL Injection

La SQL injection si verifica quando l'input utente viene incorporato nelle query del database senza validazione o sanitizzazione appropriate:

Esempio Codice Vulnerabile

login-vulnerabile.php
PHP

// CODICE VULNERABILE - Mai fare questo!
$username = $_POST['username'];
$password = $_POST['password'];

$query = "SELECT * FROM users
        WHERE username = '$username'
        AND password = '$password'";

$result = mysqli_query($connection, $query);

Esecuzione dell'Attacco

attacco-sql-injection.txt
Text

Input normale:
username: admin
password: password123

La query diventa:
SELECT * FROM users WHERE username = 'admin' AND password = 'password123'

Input malevolo:
username: admin' --
password: qualsiasi

La query diventa:
SELECT * FROM users WHERE username = 'admin' --' AND password = 'qualsiasi'

Il -- commenta il controllo password, garantendo l'accesso!

Tipi di SQL Injection

SQLi In-Band

I risultati sono restituiti direttamente nella risposta dell'applicazione.

Union-based: Combina i risultati della query dell'attaccante con l'output della query legittima.

union-injection.sql
SQL

-- Query originale: SELECT name, price FROM products WHERE id = '1'

-- Injection: 1' UNION SELECT username, password FROM users --
-- La query combinata estrae le credenziali utente insieme ai dati prodotto

Error-based: Estrae dati attraverso i messaggi di errore del database.

SQLi Blind

Nessun output diretto visibile; gli attaccanti inferiscono i risultati attraverso il comportamento dell'applicazione.

Boolean-based: Risposte diverse basate su condizioni vero/falso.

boolean-blind.sql
SQL

-- Se il primo carattere della password e 'a', la pagina carica normalmente
1' AND SUBSTRING((SELECT password FROM users WHERE id=1),1,1)='a' --

-- Itera attraverso i caratteri per estrarre dati

Time-based: Usa delay del database per estrarre informazioni.

time-based.sql
SQL

-- Se la condizione e vera, la risposta ritarda di 5 secondi
1' AND IF(SUBSTRING(password,1,1)='a', SLEEP(5), 0) --

SQLi Out-of-Band

Dati esfiltrati attraverso canali esterni (DNS, richieste HTTP).

Impatto della SQL Injection

Esfiltrazione Dati

  • Estrarre credenziali utente, informazioni personali, dati finanziari
  • Fare dump dell'intero contenuto del database
  • Accedere a dati attraverso tabelle e database multipli

Bypass Autenticazione

auth-bypass.sql
SQL

-- Bypass classico: condizione sempre-vera
' OR '1'='1' --
' OR 1=1 --
admin' --

Manipolazione Dati

  • Modificare saldi account o permessi
  • Eliminare record o droppare tabelle
  • Inserire dati malevoli

Compromissione Sistema

  • Eseguire comandi sistema operativo (via xp_cmdshell, ecc.)
  • Leggere/scrivere file sul server
  • Pivotare verso rete interna

Tecniche di Prevenzione

Query Parametrizzate (Prepared Statement)

La difesa primaria - separa il codice SQL dai dati utente.

python-sicuro.py
Python

# SICURO - Usando query parametrizzata
cursor.execute(
  "SELECT * FROM users WHERE username = %s AND password = %s",
  (username, password)
)
java-sicuro.java
JAVA

// SICURO - Usando PreparedStatement
String query = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement stmt = connection.prepareStatement(query);
stmt.setString(1, username);
stmt.setString(2, password);
ResultSet rs = stmt.executeQuery();

Validazione Input

  • Validare tipi di dato (aspetta intero, rifiuta stringhe)
  • Whitelist caratteri permessi
  • Rifiutare pattern malevoli noti
  • Validare vincoli di lunghezza

Stored Procedure

stored-procedure.sql
SQL

-- SICURO quando implementato correttamente
CREATE PROCEDURE AuthenticateUser
  @Username NVARCHAR(50),
  @Password NVARCHAR(50)
AS
BEGIN
  SELECT * FROM Users
  WHERE Username = @Username AND Password = @Password
END

Defense in Depth

  • Web Application Firewall (WAF) per rilevare pattern di attacco
  • Principio minimo privilegio per account database
  • Disabilitare funzionalita database non necessarie
  • Crittografare dati sensibili a riposo
  • Security testing e code review regolari

Rilevanza per la Carriera

L'expertise SQL injection e molto apprezzata nei ruoli di sicurezza. I web application penetration tester testano e sfruttano regolarmente la SQLi; i secure code reviewer identificano pattern vulnerabili; e gli application security engineer implementano controlli di prevenzione.

Ruoli Application Security (Mercato US)

RoleEntry LevelMid LevelSenior
Application Security Analyst75.000 USD100.000 USD135.000 USD
Web Application Pen Tester80.000 USD110.000 USD145.000 USD
Application Security Engineer95.000 USD125.000 USD165.000 USD

Source: CyberSeek

Nel Bootcamp

Come Insegniamo SQL Injection

Nel nostro Programma di Cybersecurity, non imparerai solo la teoria su SQL Injection. Praticherai con strumenti reali in laboratori pratici, guidato da professionisti del settore che usano questi concetti quotidianamente.

Trattato in:

Modulo 10: Penetration Testing e Hacking Etico

Argomenti correlati che padroneggerai:MetasploitNmapBurp SuiteEscalation dei Privilegi
Scopri Come Lo Insegniamo

360+ ore di formazione guidata da esperti. 94% tasso di occupazione