Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Co to jest PDO, jaki ma to związek z iniekcją SQL i dlaczego powinienem tego używać?

PDO — obiekty danych PHP to warstwa dostępu do bazy danych zapewniająca jednolitą metodę dostępu do wielu baz danych.

Nie uwzględnia składni specyficznej dla bazy danych, ale może sprawić, że proces przełączania baz danych i platform będzie dość bezbolesny, po prostu przez zmianę parametrów połączenia w wielu przypadkach.

Przygotowane instrukcje / zapytania parametryczne są wystarczające, aby zapobiec wstrzykiwaniu pierwszego rzędu w tej instrukcji. Jeśli używasz niezaznaczonego dynamicznego SQL gdziekolwiek indziej w swojej aplikacji, nadal jesteś podatny na wstrzykiwanie drugiego rzędu.

Wstrzykiwanie drugiego rzędu oznacza, że ​​dane były raz przepuszczane przez bazę danych, zanim zostały uwzględnione w zapytaniu, i jest znacznie trudniejsze do pobrania. AFAIK, prawie nigdy nie widzisz prawdziwych ataków drugiego rzędu, ponieważ zwykle łatwiej jest wprowadzić inżynierię społeczną.

PDO jest nieco wolniejsze niż mysql _*. Ale ma świetną przenośność. PDO zapewnia pojedynczy interfejs w wielu bazach danych. Oznacza to, że możesz używać wielu baz danych bez używania mysql_query dla mysql, mssql_query dla SQL Server itp. Po prostu użyj czegoś takiego jak $db->query("INSERT INTO...") zawsze. Bez względu na używany sterownik bazy danych.

Tak więc w przypadku większych lub przenośnych projektów preferowane jest PDO. Nawet Zend Framework używa PDO.

Wstrzyknięcie SQL

Wstrzyknięcie SQL

Wstrzyknięcie SQL to technika, w której złośliwi użytkownicy mogą wstrzykiwać polecenia SQL do instrukcji SQL za pośrednictwem danych wejściowych na stronie internetowej.

Wstrzyknięte polecenia SQL mogą zmienić instrukcję SQL i zagrozić bezpieczeństwu aplikacji internetowej.

Czy przygotowane instrukcje PDO są wystarczające, aby zapobiec wstrzyknięciu SQL?

Krótka odpowiedź to NIE, Przygotowania PDO nie ochronią Cię przed wszystkimi możliwymi atakami SQL-Injection. Ataki przykład

Jak używać PDO?

Przykład:

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

Referencje



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zbuduj system biuletynów z PHP i MySQL

  2. Nazwa schematu MySQL z myślnikiem nie pozwala mi na wykonanie zapytania wiersza poleceń

  3. Transakcja MySQL:SELECT + INSERT

  4. Problemy z dodaniem nowego ID (automatycznej inkrementacji) po zaistnieniu tabeli

  5. Funkcja MySQL LN() — zwraca logarytm naturalny liczby