Kas yra SQL įpurškimas?

Viena didžiausių žiniatinklio pažeidžiamumų klasių yra žinoma kaip „SQL injekcija“ arba „SQLi“. Struktūrinė užklausų kalba, dar žinoma kaip SQL, yra kalba, naudojama sąveikai su dauguma duomenų bazių, nors, priklausomai nuo duomenų bazės, naudojama keletas kalbos variantų platforma. Bet kuri svetainė, kurioje saugomi vartotojo duomenys, pvz., paskyros informacija, arba teikiama naudotojo įkėlimo funkcija, pvz., vaizdų prieglobos svetainė, tiems duomenims saugoti naudos duomenų bazę.

Patarimas: SQL paprastai tariamas „ess cue ell“ arba „sequel“, pirmasis variantas labiau paplitęs britų anglų kalboje, o antrasis labiau paplitęs amerikiečių anglų kalboje. Abu tarimai paprastai suprantami kalbant apie duomenų bazes.

Kas yra SQLi?

SQLi yra pažeidžiamumas, kuriame žiniatinklio kūrėjai kuria kodą, kuris palaiko ryšį tarp žiniatinklio serveris ir duomenų bazė neįdiegia apsaugos nuo SQL komandų, kurias pateikia a Vartotojas. Problema ta, kad galima pabėgti nuo duomenų bazės teiginių ir pridėti naujų argumentų arba visiškai naują teiginį. Pakeistas arba antrasis duomenų bazės sakinys gali atlikti įvairius veiksmus, įskaitant potencialiai didelio masto ištrynimus arba duomenų nutekėjimą.

Išnaudojimai paprastai sukasi siekiant užtikrinti, kad esami teiginiai būtų teisingi bet kokiomis aplinkybėmis arba pateikti antrą komandą, kuri atlieka konkretų veiksmą, pvz., ištrina arba rodo visus duomenis. Pavyzdžiui, SQL sakinys, skirtas prisijungti prie svetainės, gali patikrinti, ar pateiktas vartotojo vardas ir slaptažodis atitinka duomenų bazės įrašą. Norėdami pabandyti gauti prieigą, SQL injekcijos išnaudojimas gali pabandyti pridėti sąlygą „arba tiesa“, pvz., „arba 1=1“. Tai sudarytų komandą pagal eilutes „prisijunkite su [šiuo] vartotojo vardu, jei slaptažodis yra [this] arba šis teiginys yra teisingas“.

Kaip išvengti SQLi

SQLi anksčiau buvo labai dažnas būdas svetainėms pažeisti duomenų bazę ir tada nutekėti internete. Dėl suderintų pastangų užtikrinti, kad saugumo supratimas būtų kūrėjų mokymo dalis, šios klasės pažeidžiamumas iš esmės buvo pašalintas ir retai pastebimas.

Teisingas būdas užkirsti kelią SQLi yra naudoti paruoštus teiginius, dar vadinamus parametrinėmis užklausomis. Tradiciškai SQL sakiniai yra deklaruojami, o naudotojo įvestis sujungiama į juos tos deklaracijos metu. Su paruoštais teiginiais duomenų bazės komanda išrašoma, o tada sperate funkcija paleidžia komandą ir įterpia vartotojo duomenis. Nors tai gali atrodyti nedidelis skirtumas, jis visiškai pakeičia komandos tvarkymą. Skirtumas neleidžia vykdyti bet kokių prasmingų SQL komandų ir visą vartotojo įvestį traktuoja kaip eilutę, neleidžiančią SQL įterpti.