Jedna od najvećih klasa web ranjivosti poznata je kao “SQL Injection” ili SQLi. Jezik strukturiranih upita, zvani SQL, je jezik koji se koristi za interakciju s većinom baza podataka, iako se koristi niz varijanti jezika ovisno o bazi podataka platforma. Bilo koje web-mjesto koje pohranjuje korisničke podatke, kao što su podaci o računu, ili pruža funkciju učitavanja korisnika, kao što je web-mjesto za hosting slika, koristit će bazu podataka za pohranu tih podataka.
Savjet: SQL se općenito izgovara ili "ess cue ell" ili "sequel" s tim da je prva opcija češća u britanskom engleskom, a druga više prevladava u američkom engleskom. Oba izgovora općenito se razumiju u kontekstu razgovora o bazama podataka.
Što je SQLi?
SQLi je ranjivost gdje web programeri koji dizajniraju kod koji komunicira između web poslužitelj i baza podataka ne implementiraju zaštitu od SQL naredbi koje šalje a korisnik. Problem je u tome što je moguće pobjeći iz izraza baze podataka i dodati nove argumente ili potpuno novu izjavu. Promijenjeni ili drugi izraz baze podataka može izvesti niz radnji uključujući potencijalno velika brisanja ili curenje podataka.
Eksploatacije se obično vrte oko toga da postojeće izjave budu istinite u svim okolnostima ili daju drugu skupnu naredbu koja izvodi određenu radnju kao što je brisanje ili prikaz svih podataka. Na primjer, SQL naredba za prijavu na web stranicu može provjeriti odgovaraju li poslano korisničko ime i lozinka unosu u bazi podataka. Za pokušaj pristupa eksploataciji SQL injekcije može pokušati dodati klauzulu "ili istinito" kao što je "ili 1=1". Ovo bi napravilo naredbu duž reda "prijavite se s [ovim] korisničkim imenom, ako je lozinka [ova], ili je ova izjava istinita".
Kako spriječiti SQLi
SQLi je nekoć bio vrlo uobičajen način na koji web-mjesta provaljuju bazu podataka, a zatim propuštaju online. Zbog zajedničkih napora da se osigura da svijest o sigurnosti bude dio obuke programera, ova klasa ranjivosti je uglavnom riješena i više se rijetko viđa.
Ispravna metoda za sprječavanje SQLi-a je korištenje pripremljenih izraza, također poznatih kao parametrizirani upiti. Tradicionalno, SQL izrazi se deklariraju i u njih se spaja korisnički unos tijekom te deklaracije. Uz pripremljene izjave, naredba baze podataka se ispisuje, a zatim funkcija sperate pokreće naredbu i umeće korisničke podatke. Iako se ovo može činiti kao mala razlika, ona potpuno mijenja način na koji se rukuje naredbom. Razlika sprječava izvođenje bilo kakvih značajnih SQL naredbi i tretira sav korisnički unos kao niz, sprječavajući da se dogodi SQL injekcija.