Bobby Tabeller: A guide for å hindre SQL-injeksjon
Hvorfor gjorde Bobby»s skole miste sine poster?
skolen tilsynelatende lagrer navnene på elevene sine i en tabell kalt Elevene. Når en ny elev kommer, skolen setter inn hans/hennes navn inn i denne tabellen. Koden gjør innsetting kan se ut som følger:
Den første linjen skaper en streng som inneholder en SQL INSERT-setningen. Innholdet av $studentName
variabel er limt inn i SQL-setningen., Den andre linjen sender den resulterende SQL-setningen til databasen. Fallgruven av denne koden er at utenfor data, i dette tilfellet innholdet av $studentName
, blir en del av SQL-setningen.
Først la»s se hva SQL-setningen ser ut som om vi sett en student ved navn John:
Dette gjør akkurat det vi vil ha: her setter John inn Studenter-tabellen.
Nå har vi sett lite Bobby Tabeller, ved å sette $studentName
til Robert"); DROP TABLE Students;--
., SQL-setningen blir:
Dette setter Robert inn Studenter-tabellen. Men, SETT uttalelse er nå etterfulgt av en DROP TABLE statement som fjerner hele Studenter-tabellen. Ouch!
Hvordan for å unngå Bobby Tabeller
Det er bare en måte å unngå Bobby Tabeller angrep
- ikke lage SQL-setninger som inkluderer utenfor data.
- Bruk parameterized SQL-kall.
Det»er det. Don»t prøver å flykte ugyldige tegn. Don»t prøve å gjøre det selv. Lær hvordan du bruker parameterized uttalelser. Alltid, hver eneste gang.,
The strip får en ting som er avgjørende feil. Svaret er ikke å «rense din database innganger» deg selv. Det er utsatt for feil.