Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was ist PDO, wie hängt es mit der SQL-Injektion zusammen und warum sollte ich das verwenden?

PDO - PHP-Datenobjekte ist eine Datenbankzugriffsschicht, die eine einheitliche Zugriffsmethode auf mehrere Datenbanken bietet.

Es berücksichtigt keine datenbankspezifische Syntax, aber es kann ermöglichen, dass der Prozess des Wechselns von Datenbanken und Plattformen ziemlich schmerzlos ist, indem in vielen Fällen einfach die Verbindungszeichenfolge gewechselt wird.

Vorbereitete Anweisungen / parametrisierte Abfragen reichen aus, um eine Injektion erster Ordnung für diese Anweisung zu verhindern. Wenn Sie an anderer Stelle in Ihrer Anwendung ungeprüftes dynamisches SQL verwenden, sind Sie immer noch anfällig für Injektionen zweiter Ordnung.

Injektion zweiter Ordnung bedeutet, dass Daten einmal durch die Datenbank gelaufen sind, bevor sie in eine Abfrage aufgenommen wurden, und es viel schwieriger ist, sie abzurufen. AFAIK, Sie sehen fast nie echte Angriffe zweiter Ordnung, da es normalerweise einfacher ist, sich per Social-Engineering einzumischen.

PDO ist etwas langsamer als mysql _*. Aber es hat eine großartige Portabilität. PDO bietet eine einzige Schnittstelle über mehrere Datenbanken hinweg. Das bedeutet, dass Sie mehrere DB verwenden können, ohne mysql_query für mysql, mssql_query für SQL Server usw. zu verwenden. Verwenden Sie einfach so etwas wie $db->query("INSERT INTO...") stets. Egal welchen Datenbanktreiber Sie verwenden.

Daher ist PDO für größere oder portable Projekte vorzuziehen. Sogar Zend Framework verwendet PDO.

SQL-Injection

SQL-Injection

SQL-Injection ist eine Technik, bei der böswillige Benutzer SQL-Befehle über Webseiteneingaben in eine SQL-Anweisung einfügen können.

Eingeschleuste SQL-Befehle können die SQL-Anweisung ändern und die Sicherheit einer Webanwendung gefährden.

Sind vorbereitete PDO-Anweisungen ausreichend, um SQL-Injection zu verhindern?

Die kurze Antwort ist NEIN PDO-Vorbereitungen werden Sie nicht vor allen möglichen SQL-Injection-Angriffen schützen. Angriffe Beispiel

Wie verwende ich PDO?

Ein Beispiel:

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

Referenzen