Mikä on SQL-injektio?

Yksi suurimmista verkkohaavoittuvuuksien luokista tunnetaan nimellä "SQL Injection" tai SQLi. Structured Query Language, eli SQL, on kieli, jota käytetään vuorovaikutuksessa useimpien tietokantojen kanssa, vaikka useita kielen muunnelmia käytetään tietokannasta riippuen alusta. Kaikki verkkosivustot, jotka tallentavat käyttäjätietoja, kuten tilitietoja, tai tarjoavat käyttäjän lataustoimintoja, kuten kuvien isännöintisivusto, käyttävät tietokantaa näiden tietojen tallentamiseen.

Vinkki: SQL lausutaan yleensä joko "ess cue ell" tai "sequel", jolloin ensimmäinen vaihtoehto on yleisempi britti-englannissa ja toinen yleisempi amerikanenglannissa. Molemmat ääntämiset ymmärretään yleisesti tietokannoista puhumisen yhteydessä.

Mikä on SQLi?

SQLi on haavoittuvuus, jossa verkkokehittäjät suunnittelevat koodin, joka kommunikoi välillä verkkopalvelin ja tietokanta eivät toteuta suojauksia a.:n lähettämiä SQL-komentoja vastaan käyttäjä. Ongelmana on, että on mahdollista päästä pois tietokantakäskyistä ja lisätä uusia argumentteja tai kokonaan uusi lauseke. Muutettu tai toinen tietokantakäsky voi suorittaa useita toimintoja, mukaan lukien mahdollisesti laajamittaiset poistot tai tietovuodot.

Hyökkäykset pyörivät tyypillisesti olemassa olevien lausuntojen tekemisen todeksi kaikissa olosuhteissa tai toisen eräkomennon antamiseksi, joka suorittaa tietyn toiminnon, kuten kaikkien tietojen poistamisen tai näyttämisen. Esimerkiksi SQL-käsky kirjautumista varten verkkosivustolle voi tarkistaa, vastaavatko lähetetty käyttäjätunnus ja salasana tietokannan merkintää. Jotta SQL-injektio hyödyntää pääsyä, se voi yrittää lisätä "or true" -lauseen, kuten "or 1=1". Tämä tekisi komennon "kirjaudu sisään [tällä] käyttäjätunnuksella, jos salasana on [this] tai tämä väite on totta".

Kuinka estää SQLi

SQLi oli aiemmin hyvin yleinen tapa verkkosivustoille murtaa tietokantansa ja sitten vuotaa verkkoon. Yhteistyön ansiosta, että tietoturvatietoisuus on osa kehittäjien koulutusta, tämä haavoittuvuusluokka on suurelta osin ratkaistu, ja sitä nähdään vain harvoin.

Oikea tapa estää SQLi on käyttää valmiita käskyjä, joita kutsutaan myös parametrisoiduiksi kyselyiksi. Perinteisesti SQL-käskyt ilmoitetaan ja käyttäjän syöte ketjutetaan niihin tämän ilmoituksen aikana. Valmiilla lauseilla tietokantakomento kirjoitetaan ja sitten sperate-funktio suorittaa komennon ja lisää käyttäjätiedot. Vaikka tämä saattaa tuntua pieneltä erolta, se muuttaa kokonaan komennon käsittelytavan. Ero estää merkityksellisten SQL-komentojen suorittamisen ja käsittelee kaikkia käyttäjän syötteitä merkkijonona, mikä estää SQL-lisäyksen tapahtumisen.