Viena no lielākajām tīmekļa ievainojamību klasēm ir pazīstama kā “SQL injekcija” vai SQLi. Strukturētā vaicājuma valoda jeb SQL ir valoda, ko izmanto, lai mijiedarbotos ar lielāko daļu datu bāzu, lai gan atkarībā no datu bāzes platformas tiek izmantoti vairāki valodas varianti. Jebkura vietne, kas glabā lietotāja datus, piemēram, konta informāciju, vai nodrošina lietotāja augšupielādes funkcionalitāti, piemēram, attēlu mitināšanas vietne, šo datu glabāšanai izmantos datu bāzi.
Padoms. SQL parasti izrunā “ess cue ell” vai “sequel”, kur pirmā opcija ir izplatītāka britu angļu valodā, bet otrā ir izplatītāka amerikāņu angļu valodā. Abas izrunas parasti tiek saprastas runājot par datu bāzēm.
Kas ir SQLi?
SQLi ir ievainojamība, kurā tīmekļa izstrādātāji, kas izstrādā kodu, kas sazinās starp tīmekļa serveri un datu bāzi, neievieš aizsardzību pret lietotāja iesniegtām SQL komandām. Problēma ir tā, ka ir iespējams izvairīties no datu bāzes priekšrakstiem un pievienot jaunus argumentus vai pilnīgi jaunu paziņojumu. Mainītais vai otrais datu bāzes paziņojums var veikt dažādas darbības, tostarp potenciāli liela mēroga dzēšanu vai datu noplūdes.
Ekspluatācijas parasti ir vērstas uz to, lai esošie paziņojumi būtu patiesi jebkuros apstākļos vai tiktu nodrošināta otra pakešu komanda, kas veic noteiktu darbību, piemēram, visu datu dzēšanu vai parādīšanu. Piemēram, SQL priekšraksts, lai pieteiktos vietnē, var pārbaudīt, vai iesniegtais lietotājvārds un parole atbilst ierakstam datubāzē. Lai mēģinātu iegūt piekļuvi, SQL injekcijas izmantošana var mēģināt pievienot klauzulu “or true”, piemēram, “or 1=1”. Tādējādi komanda tiktu izpildīta saskaņā ar rindiņām “piesakieties ar [šo] lietotājvārdu, ja parole ir [šī] vai šis apgalvojums ir patiess”.
Kā novērst SQLi
SQLi agrāk bija ļoti izplatīts veids, kā vietnēm tika uzlauzta datu bāze un pēc tam noplūdināta tiešsaistē. Pateicoties saskaņotajiem centieniem nodrošināt, lai drošības izpratne būtu daļa no izstrādātāju apmācības, šī ievainojamības klase lielā mērā ir novērsta un vairs tiek novērota reti.
Pareizā metode SQLi novēršanai ir izmantot sagatavotus paziņojumus, kas pazīstami arī kā parametrizētie vaicājumi. Tradicionāli SQL priekšraksti tiek deklarēti, un šīs deklarācijas laikā tajos tiek savienota lietotāja ievade. Ar sagatavotiem paziņojumiem datu bāzes komanda tiek izrakstīta, un pēc tam sperate funkcija palaiž komandu un ievieto lietotāja datus. Lai gan tā var šķist neliela atšķirība, tā pilnībā maina veidu, kā tiek apstrādāta komanda. Atšķirība neļauj palaist jebkādas jēgpilnas SQL komandas, un visa lietotāja ievadītā informācija tiek uzskatīta par virkni, novēršot SQL ievadīšanu.