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
- http:/ /code.tutsplus.com/tutorials/pdo-vs-mysqli-which-should-you-use--net-24059
- http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059
- Är PDO-förberedda uttalanden tillräckligt för att förhindra SQL-injektion?
- http://php.net/manual/en/book.pdo. php