sql >> Databáze >  >> RDS >> Mysql

Co je PDO, jak souvisí s SQL injection a proč bych to měl používat?

PDO – datové objekty PHP je vrstva pro přístup k databázi poskytující jednotný způsob přístupu k více databázím.

Nebere v úvahu syntaxi specifickou pro databázi, ale může umožnit, aby proces přepínání databází a platforem byl poměrně bezbolestný, a to pouhým přepnutím připojovacího řetězce v mnoha případech.

Připravené příkazy / parametrizované dotazy jsou dostatečné, aby zabránily vložení prvního řádu do tohoto příkazu. Pokud používáte nekontrolované dynamické SQL kdekoli jinde ve vaší aplikaci, jste stále zranitelní vůči injekci druhého řádu.

Injektování druhého řádu znamená, že data byla jednou cyklicky prošla databází, než byla zahrnuta do dotazu, a je mnohem těžší je získat. AFAIK, téměř nikdy nevidíte skutečné útoky druhého řádu, protože je obvykle snazší prosadit se v sociálním inženýrství.

PDO je o něco pomalejší než mysql _*. Ale má skvělou přenosnost. PDO poskytuje jediné rozhraní pro více databází. To znamená, že můžete použít více DB bez použití mysql_query pro mysql, mssql_query pro SQL Server atd. Stačí použít něco jako $db->query("INSERT INTO...") vždy. Bez ohledu na to, jaký databázový ovladač používáte.

Takže pro větší nebo přenosné projekty je vhodnější PDO. Dokonce i Zend Framework používá PDO.

Injekce SQL

SQL Injection

SQL injection je technika, při které mohou uživatelé se zlými úmysly vkládat příkazy SQL do příkazu SQL prostřednictvím vstupu z webové stránky.

Vložené příkazy SQL mohou změnit příkaz SQL a ohrozit bezpečnost webové aplikace.

Stačí připravené příkazy PDO, aby zabránily vkládání SQL?

Krátká odpověď je NE, PDO připraví vás neobrání před všemi možnými útoky SQL-Injection. příklad útoků

Jak používat CHOP?

Příklad:

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

Reference



  1. Proč je spouštění uložených procedur rychlejší než SQL dotaz ze skriptu?

  2. Získávání dat z uložené procedury pomocí Entity Framework

  3. SQL, Pomocná tabulka čísel

  4. Hledání rozdílu mezi nejnovějším a druhým nejnovějším termínem