Mysql
 sql >> Base de données >  >> RDS >> Mysql

Qu'est-ce que PDO, comment est-il lié à l'injection SQL et pourquoi devrais-je l'utiliser ?

PDO - Objets de données PHP est une couche d'accès à la base de données fournissant une méthode uniforme d'accès à plusieurs bases de données.

Il ne tient pas compte de la syntaxe spécifique à la base de données, mais il peut permettre au processus de changement de bases de données et de plates-formes d'être assez indolore, simplement en changeant la chaîne de connexion dans de nombreux cas.

Les instructions préparées / requêtes paramétrées sont suffisantes pour empêcher l'injection de premier ordre sur cette instruction. Si vous utilisez du SQL dynamique non vérifié ailleurs dans votre application, vous êtes toujours vulnérable à l'injection de second ordre.

L'injection de second ordre signifie que les données ont été parcourues une fois dans la base de données avant d'être incluses dans une requête et qu'elles sont beaucoup plus difficiles à extraire. AFAIK, vous ne voyez presque jamais de véritables attaques de second ordre, car il est généralement plus facile de vous frayer un chemin par l'ingénierie sociale.

PDO est un peu plus lent que le mysql _*. Mais il a une grande portabilité. PDO fournit une interface unique sur plusieurs bases de données. Cela signifie que vous pouvez utiliser plusieurs bases de données sans utiliser mysql_query pour mysql, mssql_query pour SQL Server, etc. Utilisez simplement quelque chose comme $db->query("INSERT INTO...") toujours. Quel que soit le pilote de base de données que vous utilisez.

Ainsi, pour un projet plus grand ou portable, PDO est préférable. Même Zend Framework utilise PDO.

Injection SQL

Injection SQL

L'injection SQL est une technique permettant à des utilisateurs malveillants d'injecter des commandes SQL dans une instruction SQL, via une entrée de page Web.

Les commandes SQL injectées peuvent altérer l'instruction SQL et compromettre la sécurité d'une application Web.

Les instructions préparées par PDO sont-elles suffisantes pour empêcher l'injection SQL ?

La réponse courte est NON, Les préparations PDO ne vous défendront pas de toutes les attaques SQL-Injection possibles. Attaques exemple

Comment utiliser PDO ?

Un exemple :

$stmt = $dbh->prepare("SELECT * FROM tables WHERE names = :name");
$stmt->execute(array(':name' => $name));

Références