Parameetriline SQL, tuntud ka kui ettevalmistatud avaldused, on tehnika, mida kasutatakse veebirakenduste arendamisel SQL-i sisestamise haavatavuste leevendamiseks. See hõlmab SQL-päringutes kohahoidjate kasutamist, mis hiljem asendatakse kasutaja esitatud väärtustega. Eraldades päringuloogika kasutaja sisendist, aitab parameetritega SQL vältida pahatahtliku SQL-koodi käivitamist.
Kui veebirakendus kasutab parameetritega SQL-i, valmistab rakendusserver kõigepealt ette SQL-päringu, enne kui kasutaja sisendit lisab. Päring saadetakse andmebaasiserverisse koos kasutaja antud väärtuste kohahoidjatega. Neid kohatäitjaid esindavad tavaliselt küsimärgid või nimega parameetrid. Seejärel koostab ja optimeerib andmebaasiserver päringu, arvestamata tegelikke väärtusi.
Kui päring on ette valmistatud, seotakse kasutaja sisend kohahoidjatega, asendades need sobivate väärtustega. Sidumisprotsess tagab, et kasutaja sisendit käsitletakse andmetena, mitte käivitatava koodina. Selline päringuloogika ja kasutajasisendi eraldamine hoiab ära SQL-i süstimise rünnakud, kuna andmebaasiserver teab, et kasutaja sisendit tuleks tõlgendada andmetena, mitte päringustruktuuri osana.
Parameetritega SQL-i kasutades saavad veebirakendused tõhusalt leevendada SQL-i sisestamise haavatavusi. Siin on mõned selle lähenemisviisi peamised eelised:
1. Kaitse SQL-i süstimise eest: parameetritega SQL tagab, et kasutaja sisendit käsitletakse andmetena, välistades pahatahtliku SQL-koodi sisestamise võimaluse. Kuna kasutaja sisendit käsitletakse väärtusena, ei tõlgendata seda päringustruktuuri osana, isegi kui see sisaldab erimärke või SQL-i süntaksit.
Näiteks kaaluge järgmist haavatavat SQL-päringut ilma parameetriteta:
SELECT * FROM users WHERE username = 'admin' AND password = '<user_input>';
Ründaja võib seda päringut ära kasutada, sisestades kasutaja sisendiks `' VÕI '1'='1' –', jättes tõhusalt paroolikontrollist mööda. Parameetritega SQL-i kasutamisel näeks päring aga välja selline:
SELECT * FROM users WHERE username = 'admin' AND password = ?;
Kasutaja sisend on seotud kohahoidjaga, mis takistab SQL-i sisestamise katseid.
2. Parem jõudlus: parameetritega SQL päringuid saab ette valmistada üks kord ja täita mitu korda erinevate väärtustega. See vähendab päringu sõelumise ja optimeerimise kulusid iga kord, kui seda täidetakse. Andmebaasiserver saab ettevalmistatud avaldusi vahemällu salvestada, mille tulemuseks on sageli täidetavate päringute parem jõudlus.
3. Süntaksivigade vältimine: parameetritega SQL aitab vältida süntaksivigu, mis on põhjustatud valesti vormindatud kasutaja sisendist. Andmebaasiserver käsitleb kasutaja sisendit andmetena, tagades, et see ei sega päringu struktuuri.
4. Andmebaasi abstraktsioon: parameetritega SQL võimaldab paremat andmebaasi abstraktsiooni, kuna rakenduse kood ei pea olema teadlik aluseks oleva andmebaasi spetsiifilisest süntaksist või struktuurist. See muudab erinevate andmebaasisüsteemide vahel vahetamise lihtsamaks ilma rakenduse loogikat muutmata.
Parameetriline SQL on võimas tehnika SQL-i sisestamise haavatavuste leevendamiseks veebirakendustes. Eraldades päringuloogika kasutaja sisendist ja käsitledes kasutaja esitatud väärtusi andmetena, pakub parameetritega SQL tugevat kaitset SQL-i süstimisrünnete vastu. Selle eelised hõlmavad kaitset SQL-i süstimise eest, paremat jõudlust, süntaksivigade vältimist ja paremat andmebaasi abstraktsiooni.
Muud hiljutised küsimused ja vastused selle kohta EITC/IS/WASF veebirakenduste turvalisuse alused:
- Mis on metaandmete toomise päringu päised ja kuidas saab neid kasutada sama päritolu ja saidiüleste päringute eristamiseks?
- Kuidas vähendavad usaldusväärsed tüübid veebirakenduste rünnakupinda ja lihtsustavad turvaülevaateid?
- Mis on usaldusväärsete tüüpide vaikepoliitika eesmärk ja kuidas saab seda kasutada ebaturvaliste stringimäärangute tuvastamiseks?
- Mis on usaldusväärsete tüüpide objekti loomise protsess usaldusväärsete tüüpide API abil?
- Kuidas aitab usaldusväärsete tüüpide direktiiv sisu turbepoliitikas leevendada DOM-põhise saidiülese skriptimise (XSS) haavatavust?
- Mis on usaldusväärsed tüübid ja kuidas need lahendavad veebirakenduste DOM-põhiseid XSS-i haavatavusi?
- Kuidas saab sisuturbepoliitika (CSP) aidata leevendada saidiülese skriptimise (XSS) haavatavust?
- Mis on saidiülene päringu võltsimine (CSRF) ja kuidas saavad ründajad seda ära kasutada?
- Kuidas XSS-i haavatavus veebirakenduses kahjustab kasutajaandmeid?
- Millised on kaks peamist turvaaukude klassi, mida veebirakendustes tavaliselt leidub?
Vaadake rohkem küsimusi ja vastuseid jaotisest EITC/IS/WASF Web Applications Security Fundamentals