Come cambia... il Php. Dalla versione 5.5 la stringa di connessione ai database non è più la stessa... pericolo per milioni di siti Internet


Come cambia... il Php. Dalla versione 5.5 la stringa di connessione ai database non è più la stessa... pericolo per milioni di siti Internet
 

Database

Molte volte il tuo codice PHP utilizzerà un database per memorizzare informazioni. Hai diverse opzioni per connetterti e interagire con il tuo database. L’opzione consigliata fino a PHP 5.1.0 era di usare i driver nativi come mysql, mysqli, pgsql etc.

I driver nativi vanno bene se usi UN SOLO database nella tua applicazione ma se, per esempio, stai usando MySQL e un po’ di MSSQL, o devi connetterti a un database Oracle, allora non potrai usare gli stessi driver. Dovrai imparare una nuova API per ogni database e può diventare faticoso.

Inoltre, l’estensione mysql per PHP non è più in sviluppo attivo, ed è ufficialmente deprecata a partire da PHP 5.5, il che significa che sarà rimossa nelle prossime release. Se stai usando mysql_connect() e mysql_query() nella tua applicazione, dovrai riscriverla a un certo punto, quindi l’opzione migliore è sostituire mysql con mysqli o PDO nelle tue applicazioni secondo la tua tabella di marcia, in modo da non avere fretta in futuro. Se stai iniziando ora non usare assolutamente l’estensione mysql: usa l’estensione MySQLi o PDO.
PHP: Scegliere un’API per MySQL
 

PDO

PDO è una libreria di astrazione della connessione al database integrata in PHP a partire dalla versione 5.1.0 che fornisce un’interfaccia comune per dialogare con molti database differenti. PDO non tradurrà le query SQL e non emulerà le funzionalità mancanti; è solo per la connessione a diversi tipi di database con la stessa API.

Ancora più importante è il fatto che PDO permette di iniettare in sicurezza input esterno (es. ID) nelle tue query SQL senza doverti preoccupare di attacchi di tipo SQL injection. Questo è possibile tramite l’utilizzo dei PDO statement e dei parametri.

Supponiamo che uno script PHP riceva un ID numerico come parametro query. Questo ID dev’essere usato per recuperare un record utente dal database. Questo è il modo sbagliato di farlo:
<?php $pdo = new PDO('sqlite:users.db'); $pdo->query("SELECT name FROM users WHERE id = " . $_GET['id']); // <-- NO!


Questo è codice terribile. Stai inserendo un parametro grezzo nella tua query SQL. Il tuo script sarà manipolato in un attimo. Immagina che un hacker passi un parametro id inventato chiamando un URL come http://dominio.com/?id=1%3BDELETE+FROM+users. In questo modo la variabile $_GET['id'] sarà impostata a 1;DELETE FROM users, che cancellerà tutti i tuoi utenti! Invece, dovresti sanitizzare l’input usando i parametri di PDO:
<?php $pdo = new PDO('sqlite:users.db'); $stmt = $pdo->prepare('SELECT name FROM users WHERE id = :id'); $stmt->bindParam(':id', $_GET['id'], PDO::PARAM_INT); // <-- Sanitizzato automaticamente da PDO $stmt->execute();


Questo è codice corretto. Usa i parametri negli statement PDO. In questo modo viene eseguito l’escape dell’input esterno ID prima che venga introdotto nel database prevenendo potenziali attacchi di tipo SQL injection.


Imparara a usare PDO

Dovresti anche sapere che le connessioni al database usano risorse e non è raro che le risorse vengano esaurite se le connessioni non sono chiuse implicitamente, ma questo è più comune in altri linguaggi. Utilizzando PDO puoi chiudere implicitamente la connessione distruggendo l’oggetto e assicurandoti che tutti i rimanenti riferimenti a esso siano cancellati (impostati a NULL). Se non lo fai esplicitamente, PHP chiuderà automaticamente la connessione quando il tuo script termina l’esecuzione, a meno che, ovviamente, non usi le connessioni persistenti.


Impara a gestire le connessioni PDO


fonte: http://it.phptherightway.com/#databases

Commenti

Post popolari in questo blog

Simulazioni di reti (con Cisco Packet Tracer)

Esercizi sulla rappresentazione della virgola mobile IEEE 754 (Floating Point)