Bobby Tables: a guide to preventing SQL injection
de school slaat blijkbaar de namen van hun leerlingen op in een tabel genaamd studenten. Wanneer een nieuwe student aankomt, voegt de school zijn / haar naam in deze tabel. De code die het invoegen doet kan er als volgt uitzien:
de eerste regel maakt een string aan die een SQL INSERT statement bevat. De inhoud van de $studentName
variabele is gelijmd in het SQL statement., De tweede regel stuurt het resulterende SQL statement naar de database. De valkuil van deze code is dat externe data, in dit geval de inhoud van $studentName
, deel wordt van het SQL statement.
laten we eerst zien hoe het SQL statement eruit ziet als we een student met de naam John invoegen:
dit doet precies wat we willen: het voegt John in de Students tabel.
nu voegen we kleine Bobby tabellen in, door $studentName
in te stellen op Robert"); DROP TABLE Students;--
., Het SQL statement wordt:
Dit voegt Robert in de Students tabel. Echter, de INSERT statement wordt nu gevolgd door een DROP TABLE statement die de hele studenten tabel verwijdert. Au!
hoe Bobby Tables te vermijden
Er is maar één manier om Bobby Tables aanvallen te voorkomen
- maak geen SQL statements aan die externe gegevens bevatten.
- gebruik geparametreerde SQL-aanroepen.
dat is het. Probeer niet om ongeldige tekens te ontsnappen. Probeer het niet zelf te doen. Leer hoe je geparametreerde statements kunt gebruiken. Altijd, elke keer.,
De strip heeft één ding cruciaal verkeerd. Het antwoord is niet om” uw database-ingangen te ontsmetten ” zelf. Het is gevoelig voor fouten.