⊗ppSpPDQu 58 of 83 menu

Problemen met query's in PDO in PHP

Zoals je al moet weten, zijn SQL-query's vatbaar voor SQL-injecties. De PDO-extensie is bedoeld om injecties te bestrijden, maar standaard, uit zichzelf, doet het dit niet.

Laten we het probleem bekijken aan de hand van een voorbeeld. Stel dat we de volgende query hebben, waarin een variabele wordt ingevoegd:

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

Stel dat onze variabele van buitenaf komt, bijvoorbeeld vanuit een GET-parameter. Voor de eenvoud, laten we de waarde echter gewoon handmatig instellen. We verwachten een numerieke waarde, zoals deze:

<?php $id = 1; ?>

Een kwaadwillende hacker kan echter de volgende waarde doorgeven (we gaan ervan uit dat we een veld role hebben):

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

Het resultaat is dat we de volgende query bedoelden:

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

Maar we kregen de volgende query, die de beheerder van de site ophaalt:

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

Om een dergelijke situatie te voorkomen, heeft PDO een speciaal mechanisme, dat prepared statements (voorbereide query's) wordt genoemd. Deze zullen we in de volgende les behandelen.

Pleeg opzettelijk een SQL-injectie op je database.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren