sql >> Databasteknik >  >> RDS >> Mysql

Vad är PDO, hur är det relaterat till SQL-injektion, och varför ska jag använda detta?

PDO - PHP-dataobjekt är ett databasåtkomstlager som ger en enhetlig metod för åtkomst till flera databaser.

Det tar inte hänsyn till databasspecifik syntax, men det kan tillåta processen att byta databaser och plattformar vara ganska smärtfri, helt enkelt genom att byta anslutningssträng i många fall.

Förberedda uttalanden/parametriserade frågor är tillräckliga för att förhindra första ordningens injicering av den satsen. Om du använder okontrollerad dynamisk SQL någon annanstans i din applikation är du fortfarande sårbar för andra ordningens injektion.

Andra ordningens injektion innebär att data har cyklats genom databasen en gång innan de inkluderades i en fråga och är mycket svårare att få fram. AFAIK, du ser nästan aldrig riktiga andra ordningensattacker, eftersom det vanligtvis är lättare att socialmanipulera dig in.

PDO är lite långsammare än mysql _*. Men den har stor bärbarhet. PDO ger ett enda gränssnitt över flera databaser. Det betyder att du kan använda flera DB utan att använda mysql_query för mysql, mssql_query för SQL Server, etc. Använd bara något som $db->query("INSERT INTO...") alltid. Oavsett vilken databasdrivrutin du använder.

Så för större eller bärbara projekt är PDO att föredra. Även Zend Framework använder SUB.

SQL-injektion

SQL-injektion

SQL-injektion är en teknik där skadliga användare kan injicera SQL-kommandon i en SQL-sats, via inmatning av webbsidor.

Injicerade SQL-kommandon kan ändra SQL-satsen och äventyra säkerheten för en webbapplikation.

Är PDO-förberedda satser tillräckliga för att förhindra SQL-injektion?

Det korta svaret är NEJ, PDO-förberedelser kommer inte att försvara dig från alla möjliga SQL-injektionsattacker. Attacker exempel

Hur använder man SUB?

Ett exempel:

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

Referenser



  1. SSIS källformat Implicit konvertering för datum och tid

  2. Använda OpenVPN för att säkra åtkomst till ditt databaskluster i molnet

  3. mysql ...i där klausulen är tvetydig

  4. Om installationen av pg gem misslyckades, kan mkmf.rb inte hitta header-filer för ruby ​​(Mac OSX 10.6.5)