PDO – PHP Data Objects е слой за достъп до база данни, осигуряващ единен метод за достъп до множество бази данни.
Той не отчита специфичния за базата данни синтаксис, но може да позволи процеса на превключване на бази данни и платформи да бъде доста безболезнен, просто чрез превключване на низа за връзка в много случаи.
Подготвените оператори/параметризираните заявки са достатъчни, за да предотвратят инжектиране от първи ред в този израз. Ако използвате непроверен динамичен SQL някъде другаде в приложението си, все още сте уязвими от инжектиране от втори ред.
Инжектирането от втори ред означава, че данните са преминали през базата данни веднъж, преди да бъдат включени в заявка, и е много по-трудно да се извади. AFAIK, вие почти никога не виждате истински атаки от втори ред, тъй като обикновено е по-лесно да си проправите път към социалното инженерство.
PDO е малко по-бавен от mysql
_*. Но има страхотна преносимост. PDO осигурява единен интерфейс в множество бази данни. Това означава, че можете да използвате множество DB, без да използвате mysql_query за mysql, mssql_query за SQL сървър и т.н. Просто използвайте нещо като $db->query("INSERT INTO...")
винаги. Без значение какъв драйвер за база данни използвате.
Така че за по-голям или преносим проект PDO е за предпочитане. Дори Zend Framework използва ЗНП.
SQL инжекция
SQL инжекция
SQL инжектирането е техника, при която злонамерените потребители могат да инжектират SQL команди в SQL израз чрез въвеждане на уеб страница.
Инжектираните SQL команди могат да променят SQL израза и да компрометират сигурността на уеб приложение.
Достатъчни ли са изготвените за PDO изрази, за да се предотврати SQL инжекция?
Краткият отговор е НЕ Подготовката на PDO няма да ви защити от всички възможни SQL-инжектирани атаки. Атаки пример
Как да използвам PDO?
Пример:
$stmt = $dbh->prepare("SELECT * FROM tables WHERE names = :name");
$stmt->execute(array(':name' => $name));
Референции
- 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
- Изготвени ли са PDO изявления достатъчно, за да предотврати SQL инжектирането?
- http://php.net/manual/en/book.pdo. php