Mysql
 sql >> база данни >  >> RDS >> Mysql

Какво е PDO, как е свързано със SQL инжектирането и защо трябва да използвам това?

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));

Референции



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкване на масив в MySQL база данни с PHP

  2. Отмяна на неуспешна миграция на Rails

  3. Как да филтрирате SQL резултатите във връзка има-много-през

  4. Как да инициализирам mysql контейнер, когато е създаден на Kubernetes?

  5. MySQL Изберете JOIN 3 Tables