-->

Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Difendersi da SQL Injection


Il modo più efficace è utilizzare query parametrizzate (prepared statements).

Difendersi da SQL Injection in PHP

Per difendersi da SQL Injection in PHP, il modo più efficace è utilizzare query parametrizzate (prepared statements), che separano i dati dagli elementi di comando SQL. PHP offre una libreria chiamata PDO (PHP Data Objects) che consente di interagire con vari database in modo sicuro e supporta le query parametrizzate.
Ecco un esempio pratico di come proteggersi da SQL Injection utilizzando PDO in PHP.

Codice PHP per il Login Sicuro


<?php
// Connessione al database
$host = 'localhost';
$dbname = 'nome_database';
$username = 'nome_utente_db';
$password = 'password_db';

try {
    // Creazione dell'oggetto PDO
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    // Configurazione dell'errore PDO per lanciare eccezioni
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Errore di connessione al database: " . $e->getMessage());
}

// Esempio di input da un form di login
$inputUsername = $_POST['nome_utente'];
$inputPassword = $_POST['password'];

try {
    // Preparazione della query parametrizzata
    $query = "SELECT * FROM utenti WHERE nome_utente = :nome_utente AND password = :password";
    $stmt = $pdo->prepare($query);

    // Associazione dei parametri
    $stmt->bindParam(':nome_utente', $inputUsername, PDO::PARAM_STR);
    $stmt->bindParam(':password', $inputPassword, PDO::PARAM_STR);

    // Esecuzione della query
    $stmt->execute();

    // Controllo dei risultati
    if ($stmt->rowCount() > 0) {
        echo "Login avvenuto con successo!";
    } else {
        echo "Nome utente o password non corretti.";
    }
} catch (PDOException $e) {
    echo "Errore nell'esecuzione della query: " . $e->getMessage();
}
?>


Vantaggi di Questa Approccio


Utilizzando le query parametrizzate di PDO, si impedisce che il contenuto dei parametri possa alterare la logica della query SQL. Questo è uno dei metodi più sicuri per evitare attacchi SQL Injection.

Ulteriori Misure di Sicurezza

Oltre alle query parametrizzate, considera anche:
- Hashing delle Password: Usa password_hash() per memorizzare e verificare le password in modo sicuro.

- Limitazione dei Permessi sul Database: Assicurati che l'utente del database abbia solo i permessi necessari.

- Validazione e Sanitizzazione degli Input: Anche se utilizzi le query parametrizzate, è una buona pratica validare e sanitizzare i dati per garantire che rispettino il formato previsto.