🔐 Protezione da SQL Injection

Quando si lavora con PHP e database, uno dei rischi più pericolosi è la SQL Injection.

Capire questo problema e sapere come evitarlo è fondamentale per creare siti web sicuri.


🧠 Cos’è la SQL Injection

La SQL Injection è un attacco in cui un utente inserisce codice SQL nei campi di input (form, URL, ecc.) per:


⚠ Esempio di codice vulnerabile

<?php

$nome = $_POST["nome"];
$sql = "SELECT * FROM utenti WHERE nome = '$nome'";
$result = mysqli_query($conn, $sql);
?>

👉 Qui il valore $nome viene inserito direttamente nella query.


😱 Esempio di attacco

Se un utente inserisce:

' OR 1=1 --

La query diventa:

SELECT * FROM utenti WHERE nome = '' OR 1=1 --'

👉 Il risultato sarà tutti gli utenti del database 😱


🛡️ Come proteggersi

Ci sono diversi metodi per proteggersi dalla SQL Injection.


✅ 1. Usare i Prepared Statements (consigliato)

È il metodo più sicuro.

<?php

$stmt = mysqli_prepare($conn, "SELECT * FROM utenti WHERE nome = ?");
mysqli_stmt_bind_param($stmt, "s", $nome);
mysqli_stmt_execute($stmt);
?>

👉 I dati vengono separati dalla query e non possono essere interpretati come codice SQL.


🧹 2. Validare e sanitizzare i dati

<?php

$nome = trim($_POST["nome"]);
$nome = htmlspecialchars($nome);
?>

👉 Questo aiuta, ma non basta da solo.


🔒 3. Evitare concatenazioni dirette

❌ NON fare così:

$sql = "SELECT * FROM utenti WHERE nome = '$nome'";

👉 È il modo più comune per creare vulnerabilità.


🔐 4. Usare tipi di dati corretti

mysqli_stmt_bind_param($stmt, "i", $id);

👉 Se un valore deve essere un numero, trattalo come numero.


🧠 Buone pratiche


📌 Esempio completo sicuro

<?php

$conn = mysqli_connect("localhost", "root", "", "miodatabase");
$nome = $_POST["nome"];
$stmt = mysqli_prepare($conn, "SELECT * FROM utenti WHERE nome = ?");
mysqli_stmt_bind_param($stmt, "s", $nome);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
while($row = mysqli_fetch_assoc($result)){
    echo $row["nome"];
}
?>

🎯 Riassunto


📚 Conclusione

Proteggere il proprio codice dalla SQL Injection è fondamentale per la sicurezza di qualsiasi applicazione web.

👉 Basta una piccola disattenzione per creare un grosso problema… ma con gli strumenti giusti si evita facilmente 👍