sql >> Database teknologi >  >> RDS >> Mysql

Hvad er PDO, hvordan er det relateret til SQL-injektion, og hvorfor skal jeg bruge dette?

PDO - PHP-dataobjekter er et databaseadgangslag, der giver en ensartet metode til adgang til flere databaser.

Det tager ikke højde for databasespecifik syntaks, men det kan tillade, at processen med at skifte databaser og platforme er ret smertefri, blot ved at skifte forbindelsesstrengen i mange tilfælde.

Forberedte udsagn/parametriserede forespørgsler er tilstrækkelige til at forhindre første-ordens indsprøjtning på det udsagn. Hvis du bruger umarkeret dynamisk SQL et andet sted i din applikation, er du stadig sårbar over for andenordens injektion.

Anden-ordens indsprøjtning betyder, at data er blevet cyklet gennem databasen én gang, før de er inkluderet i en forespørgsel, og det er meget sværere at hente. AFAIK, du ser næsten aldrig rigtige andenordens angreb, da det normalt er nemmere at social-engineere dig ind.

PDO er en smule langsommere end mysql _*. Men den har stor bærbarhed. PDO giver en enkelt grænseflade på tværs af flere databaser. Det betyder, at du kan bruge flere DB uden at bruge mysql_query til mysql, mssql_query til SQL Server osv. Bare brug noget som $db->query("INSERT INTO...") altid. Uanset hvilken databasedriver du bruger.

Så til større eller bærbare projekter er PDO at foretrække. Selv Zend Framework bruger PDO.

SQL-injektion

SQL-injektion

SQL-injektion er en teknik, hvor ondsindede brugere kan injicere SQL-kommandoer i en SQL-sætning via websideinput.

Injicerede SQL-kommandoer kan ændre SQL-sætningen og kompromittere sikkerheden i en webapplikation.

Er PDO-forberedte sætninger tilstrækkelige til at forhindre SQL-injektion?

Det korte svar er NEJ, PDO-forberedelser vil ikke forsvare dig mod alle mulige SQL-injektionsangreb. Angreb eksempel

Hvordan bruger man PDO?

Et eksempel:

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

Referencer



  1. Implementering af automatiseret databasebackup og gendannelse med standardmidler

  2. Sådan oprettes forbindelse til SQL Server med Windows-godkendelse fra Node.JS ved hjælp af mssql-modul

  3. Oracle-sekvens men så i MS SQL Server

  4. Symfony3 hvordan man gemmer brugerroller i databasen