Bobby Tabeller: En guide til forebyggelse af SQL-injektion
Hvorfor gjorde Bobby”s skole miste deres poster?
skolen gemmer tilsyneladende navnene på deres elever i en tabel kaldet studerende. Når en ny elev ankommer, sætter skolen sit navn ind i denne tabel. Koden, der udfører indsættelsen, kan se ud som følger:
den første linje opretter en streng, der indeholder en s .l INSERT-sætning. Indholdet af variablen $studentName
limes ind i s .l-sætningen., Den anden linje sender den resulterende s .l-sætning til databasen. Faldgruben for denne kode er, at eksterne data, i dette tilfælde bliver indholdet af $studentName
, en del af S .l-sætningen.
lad os først se, hvordan s .l-sætningen ser ud, hvis vi indsætter en studerende ved navn John:
Dette gør nøjagtigt, hvad vi vil: det indsætter John i Elevbordet.
nu indsætter vi små Bobby-tabeller ved at indstille $studentName
til Robert"); DROP TABLE Students;--
., S .l-sætningen bliver:
dette indsætter Robert i Elevbordet. Imidlertid efterfølges indsæt sætningen nu af en DROP TABLE-erklæring, der fjerner hele Elevtabellen. Av!
Sådan undgås Bobby Tables
Der er kun en måde at undgå Bobby Tables angreb
- Opret ikke s .l-sætninger, der indeholder eksterne data.
- brug parametriserede s .l-opkald.
at”s det. Don ” t forsøge at undslippe ugyldige tegn. Don ” t forsøge at gøre det selv. Lær hvordan du bruger parametriserede udsagn. Altid, hver eneste gang.,
strimlen får en ting afgørende forkert. Svaret er ikke at” desinficere dine databaseindgange ” selv. Det er tilbøjeligt til fejl.