Sisällysluettelo:
Määritelmä - Mitä SQL-injektio tarkoittaa?
SQL-injektio on tietokonehyökkäys, jossa haittaohjelmat upotetaan huonosti suunniteltuun sovellukseen ja siirretään sitten taustatietokantaan. Haitalliset tiedot tuottavat sitten tietokantakyselyjen tuloksia tai toimia, joita ei olisi koskaan pitänyt suorittaa.
Techopedia selittää SQL-injektiota
Katsokaamme esimerkki SQL-injektiohyökkäyksestä:
Pankin toimintoja suorittava sovellus sisältää valikoita, joita voidaan käyttää asiakkaiden tietojen etsimiseen tietopisteiden, kuten asiakkaan sosiaaliturvatunnuksen, avulla. Taustalla sovellus kutsuu SQL-kyselyä, joka suoritetaan tietokannassa siirtämällä syötetyt hakuarvot seuraavasti:
VALITSE asiakkaan_nimi, puhelin, osoite, syntymäpäivä_JOS social_sec_no = 23425
Tässä näyteohjelmassa käyttäjä syöttää arvon 23425 sovellusvalikkoikkunaan ja pyytää käyttäjää antamaan sosiaaliturvatunnuksen. Sitten, käyttäjän antamaa arvoa käyttämällä, SQL-kysely suoritetaan tietokantaan.
SQL-tietämystä omaava käyttäjä voi ymmärtää sovelluksen ja sen sijaan, että kirjoittaisi yhden arvon, kun sinulta kysytään sosiaaliturvatunnusta, kirjoita merkkijono ”23425 tai 1 = 1”, joka välitetään tietokantaan seuraavasti:
VALITSE asiakkaan nimi, puhelin, osoite, syntymäpäivä_JOS social_sec_no = 23425 tai 1 = 1
WHERE-lause on tärkeä, koska se tuo esiin haavoittuvuuden. Tietokannassa ehto 1 = 1 on aina totta, ja koska kysely on määritetty palauttamaan asiakkaan sosiaaliturvatiedot (23425) tai WHERE 1 = 1, kysely palauttaa kaikki taulukon rivit, mikä ei ollut alkuperäinen tarkoitus.
Yllä oleva SQL-injektiohyökkäysesimerkki on yksinkertainen, mutta se osoittaa, kuinka haavoittuvuuden hyödyntäminen huijaa sovellusta backend-tietokantakyselyn tai -komennon suorittamiseen.
SQL-injektiohyökkäyksiä voidaan vähentää varmistamalla asianmukainen sovellussuunnittelu, etenkin moduuleissa, jotka vaativat käyttäjän syöttämiä tietokantakyselyjen tai -komentojen suorittamista. Yllä olevassa esimerkissä sovellusta voidaan muuttaa siten, että se hyväksyy vain yhden numeerisen arvon.
