⊗ppSpPDQu 58 of 83 menu

Problémy dotazů v PDO v PHP

Jak již pravděpodobně víte, SQL dotazy jsou náchylné k SQL injekcím. Rozšíření PDO je určeno k boji proti injekcím, ale jednoduše tak, ve výchozím nastavení, to nedělá.

Podívejme se na problém na příkladu. Předpokládejme, že máme následující dotaz, do kterého se vkládá proměnná:

<?php $sql = "SELECT * FROM users WHERE id=$id"; $res = $pdo->query($sql); ?>

Předpokládejme, že naše proměnná přichází odkudsi zvenčí, například z GET parametru. Pro jednoduchost ji však prostě nastavme ručně. Očekáváme nějakou číselnou hodnotu, například tuto:

<?php $id = 1; ?>

Zlomyslný hacker však může předat následující hodnotu (předpokládejme, že máme pole role):

<?php $id = '-1 OR role="admin"'; ?>

Výsledkem je, že jsme chtěli následující dotaz:

<?php $sql = "SELECT * FROM users WHERE id=1"; $res = $pdo->query($sql); ?>

A dostali jsme následující, který vytáhne správce webu:

<?php $sql = "SELECT * FROM users WHERE id=-1 OR role="admin""; $res = $pdo->query($sql); ?>

Abychom se vyhnuli této situaci, v PDO je připraven speciální mechanismus, který se nazývá připravené dotazy. Ty si rozebereme v příští lekci.

Záměrně proveďte SQL injekci do vaší databáze.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout