Mis on SQL-i süstimine?

Üks suurimaid veebihaavatavusklasse on tuntud kui "SQL Injection" või SQLi. Struktureeritud päringukeel ehk SQL on keel, mida kasutatakse enamiku andmebaasidega suhtlemiseks, kuigi sõltuvalt andmebaasist kasutatakse mitmeid keelevariante platvorm. Kõik veebisaidid, mis salvestavad kasutajaandmeid (nt kontoteavet) või pakuvad kasutaja üleslaadimise funktsioone (nt piltide hostimise veebisait), kasutavad nende andmete salvestamiseks andmebaasi.

Näpunäide: SQL-i hääldatakse üldiselt kas "ess cue ell" või "järg", kusjuures esimene variant on levinum briti inglise keeles ja teine ​​rohkem levinud Ameerika inglise keeles. Mõlemat hääldust mõistetakse üldiselt andmebaasidest rääkimise kontekstis.

Mis on SQLi?

SQLi on haavatavus, kus veebiarendajad, kes kujundavad koodi, mis suhtleb nende vahel veebiserver ja andmebaas ei rakenda kaitset SQL-käskude vastu, mida esitab a kasutaja. Probleem on selles, et andmebaasilausetest on võimalik põgeneda ja lisada uusi argumente või täiesti uut avaldust. Muudetud või teine ​​andmebaasi avaldus võib teha mitmesuguseid toiminguid, sealhulgas potentsiaalselt ulatuslikke kustutamisi või andmeleket.

Kasutusviisid on tavaliselt seotud olemasolevate väidete kõigis tingimustes tõeseks muutmisega või teise partiikäsuga, mis sooritab konkreetse toimingu, näiteks kustutab või kuvab kõik andmed. Näiteks võib veebisaidile sisselogimise SQL-lause kontrollida, kas esitatud kasutajanimi ja parool vastavad andmebaasi kirjele. Juurdepääsu proovimiseks võib SQL-i süstimiskasutus proovida lisada klausli „või tõene”, näiteks „või 1=1”. See muudaks käsu "logi sisse [selle] kasutajanimega, kui parool on [see] või see väide on tõsi".

Kuidas SQLi ära hoida

SQLi oli varem väga levinud viis veebisaitide andmebaasi rikkumiseks ja seejärel veebi lekkimiseks. Tänu ühisele jõupingutusele tagada, et turvateadlikkus oleks osa arendajate koolitusest, on see haavatavus suures osas lahendatud ja seda esineb enam harva.

Õige meetod SQLi ennetamiseks on kasutada ettevalmistatud avaldusi, mida tuntakse ka parameetritega päringutena. Traditsiooniliselt deklareeritakse SQL-laused ja nendesse ühendatakse selle deklareerimise ajal kasutaja sisend. Ettevalmistatud lausetega kirjutatakse andmebaasi käsk välja ja seejärel käivitab sperate funktsioon käsu ja lisab kasutajaandmed. Kuigi see võib tunduda väikese erinevusena, muudab see täielikult seda, kuidas käsku käsitletakse. Erinevus takistab mõtestatud SQL-käskude käitamist ja käsitleb kogu kasutaja sisendit stringina, takistades SQL-i sisestamist.