sql >> Database >  >> RDS >> Mysql

Wat is PDO, hoe is het gerelateerd aan SQL-injectie en waarom zou ik dit gebruiken?

BOB - PHP-gegevensobjecten is een databasetoegangslaag die een uniforme methode biedt voor toegang tot meerdere databases.

Het houdt geen rekening met databasespecifieke syntaxis, maar het kan ervoor zorgen dat het proces van het wisselen van databases en platforms redelijk pijnloos is, simpelweg door in veel gevallen de verbindingsreeks te wijzigen.

Voorbereide instructies / geparametriseerde query's zijn voldoende om injectie van de eerste orde op die instructie te voorkomen. Als u niet-aangevinkte dynamische SQL ergens anders in uw toepassing gebruikt, bent u nog steeds kwetsbaar voor injectie van de tweede orde.

Injectie van de tweede orde betekent dat gegevens één keer door de database zijn gefietst voordat ze in een zoekopdracht zijn opgenomen, en dat het veel moeilijker is om ze voor elkaar te krijgen. AFAIK, je ziet bijna nooit echte tweede-orde-aanvallen, omdat het meestal gemakkelijker is om je een weg naar binnen te banen.

PDO is iets langzamer dan de mysql _*. Maar het heeft een grote draagbaarheid. PDO biedt een enkele interface voor meerdere databases. Dat betekent dat u meerdere DB kunt gebruiken zonder mysql_query voor mysql, mssql_query voor SQL Server, enz. Gebruik gewoon iets als $db->query("INSERT INTO...") altijd. Het maakt niet uit welk databasestuurprogramma u gebruikt.

Dus voor grotere of draagbare projecten heeft PDO de voorkeur. Zelfs Zend Framework gebruikt BOB.

SQL-injectie

SQL-injectie

SQL-injectie is een techniek waarbij kwaadwillende gebruikers SQL-commando's kunnen injecteren in een SQL-instructie, via webpagina-invoer.

Geïnjecteerde SQL-opdrachten kunnen de SQL-instructie wijzigen en de beveiliging van een webtoepassing in gevaar brengen.

Zijn door PDO opgestelde instructies voldoende om SQL-injectie te voorkomen?

Het korte antwoord is NEE, PDO-voorbereidingen zullen je niet beschermen tegen alle mogelijke SQL-injection-aanvallen. Aanvallen voorbeeld

Hoe gebruik ik BOB?

Een voorbeeld:

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

Referenties



  1. gegevens opslaan in een database met behulp van tekst bewerken en knop

  2. Proberen om een ​​Oracle te exporteren via PL/SQL geeft een datum van 0000-00-00

  3. De AUTO_INCREMENT-waarde van alle tabellen in een MySQL-database bijwerken

  4. HQL is null En !=null op een Oracle-kolom