Kaj je injekcija SQL?

Eden največjih razredov spletnih ranljivosti je znan kot "SQL Injection" ali SQLi. Jezik strukturiranih poizvedb, znan tudi kot SQL, je jezik, ki se uporablja za interakcijo z večino baz podatkov, čeprav se glede na bazo podatkov uporablja več različic jezika platforma. Vsako spletno mesto, ki shranjuje uporabniške podatke, kot so podatki o računu, ali zagotavlja funkcionalnost nalaganja uporabnikov, kot je spletno mesto za gostovanje slik, bo za shranjevanje teh podatkov uporabljalo bazo podatkov.

Nasvet: SQL se običajno izgovori bodisi kot "ess cue ell" ali "sequel", pri čemer je prva možnost pogostejša v britanski angleščini, druga pa bolj razširjena v ameriški angleščini. Obe izgovorjavi se na splošno razumeta v kontekstu govora o bazah podatkov.

Kaj je SQLi?

SQLi je ranljivost, kjer spletni razvijalci, ki oblikujejo kodo, ki komunicira med spletni strežnik in baza podatkov ne izvajata zaščite pred ukazi SQL, ki jih pošlje a uporabnik. Težava je v tem, da je mogoče pobegniti iz stavkov baze podatkov in dodati nove argumente ali popolnoma nov stavek. Spremenjeni ali drugi stavek baze podatkov lahko izvede vrsto dejanj, vključno s potencialno obsežnimi izbrisi ali uhajanjem podatkov.

Izkoriščanje se običajno vrti okoli tega, da obstoječe izjave postanejo resnične v vseh okoliščinah ali zagotovijo drugi paketni ukaz, ki izvede določeno dejanje, kot je brisanje ali prikaz vseh podatkov. Na primer, stavek SQL za prijavo na spletno mesto lahko preveri, ali predloženo uporabniško ime in geslo ustrezata vnosu v bazi podatkov. Če želite pridobiti dostop do izkoriščanja injekcije SQL, lahko poskusite dodati klavzulo »ali res«, kot je »ali 1=1«. To bi naredilo ukaz po vrstici »prijavite se s [tem] uporabniškim imenom, če je geslo [to] ali je ta izjava resnična«.

Kako preprečiti SQLi

SQLi je bil včasih zelo pogost način, da so spletna mesta vdrla v bazo podatkov in nato pricurljala v splet. Zaradi usklajenega prizadevanja za zagotovitev, da je varnostna zavest del usposabljanja razvijalcev, je bil ta razred ranljivosti v veliki meri odpravljen in je le redkokdaj več viden.

Pravilna metoda za preprečevanje SQLi je uporaba pripravljenih stavkov, znanih tudi kot parametrizirane poizvedbe. Običajno so stavki SQL deklarirani in imajo med to izjavo uporabniški vnos združen vanje. S pripravljenimi stavki se ukaz baze podatkov izpiše in nato funkcija sperate zažene ukaz in vstavi uporabniške podatke. Čeprav se to morda zdi manjša razlika, popolnoma spremeni način ravnanja z ukazom. Razlika preprečuje izvajanje kakršnih koli smiselnih ukazov SQL in obravnava ves uporabniški vnos kot niz, kar preprečuje, da bi prišlo do injekcije SQL.