Mikä on SQL-injektio (SQLi)?
SQL-injektio (SQLi) on hyökkäystyyppi, jossa hyökkääjät syöttävät haitallisen SQL-lauseen syöttökenttään manipuloidakseen tietokantaa.
Tämä hyökkäys kohdistuu sovelluksiin, jotka eivät käsittele asianmukaisesti validointia tai käyttäjän syötettä, mahdollistaen luvattoman pääsyn arkaluontoisiin tietoihin, kuten salasanoihin tai luottokorttitietoihin jne.
Kuinka SQL-injektio toimii
Kun sovellus sisällyttää käyttäjän syötteen suoraan tietokantakyselyyn ilman asianmukaista validointia, hyökkääjät voivat muokata kyselyn toimintaa syöttämällä haitallisen SQL-lauseen.
Esimerkiksi:
SELECT * FROM users WHERE username = 'admin' AND password = '12345';
Hyökkääjä voisi syöttää:
' OR '1'='1
Johtaen seuraavaan:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';
Tämä palauttaa aina totta, mahdollistaen luvattoman pääsyn.
Miksi SQL-injektio on tärkeä kyberturvallisuudessa
SQL-injektio on vaarallisin ja vanhin tekniikka kyberturvallisuudessa. Tämä hyökkäystyyppi on jatkuvasti listattu OWASP Top 10:ssä.
Jopa pienet haavoittuvuudet mahdollistavat hyökkääjän:
- Pääsy, muokkaus tai poistaminen dataa
- Autentikoinnin ohittaminen
- Hallinnollisten toimintojen suorittaminen tietokannassa.
- Järjestelmän kokonaisvaltainen vaarantaminen.
Yleiset SQL-injektiotyypit
- Klassinen SQLi : Suora injektio verkkolomakkeiden tai URL-parametrien kautta.
- Sokea SQLi : Hyökkääjät päättelevät tietokannan tietoja epäsuorasti (esim. virheilmoitusten tai vasteajan kautta).
- Union-pohjainen SQLi : Käyttää UNION-operaattoria yhdistääkseen tulokset useista kyselyistä.
- Virhepohjainen SQLi : Perustuu tietokannan virheilmoituksiin tiedon keräämiseksi.
- Aikapohjainen sokea SQLi : Hyödyntää palvelimen vasteviiveitä arvaten kyselyn tuloksia.
Kuinka estää SQL-injektio
1. Käytä parametrisoituja kyselyitä (valmistellut lauseet)
Varmista, että SQL-komennot käsittelevät käyttäjän syötteenä dataa, ei suoritettavaa koodia.
cursor.execute("SELECT * FROM users WHERE username = ?", (username,))
2. Syötteen validointi ja puhdistus
Validoi kaikki käyttäjiltä tuleva syöte, sallien vain odotetut merkit.
3. Käytä ORM-kehyksiä
Kehykset kuten Prisma, Hibernate jne. vähentävät suoraa SQL-käsittelyä.
4. Vähimmäisoikeusperiaate
Rajoita käyttäjän oikeuksia, anna vain tarvittavat oikeudet.
5. Säännöllinen turvallisuustestaus
Käytä sovellusten tietoturvatestaustyökaluja, kuten SAST, DAST tai IAST, havaitaksesi injektiovirheet varhaisessa vaiheessa.
Esimerkki tosielämästä
Verkkokauppasivusto kärsi tietomurrosta, jossa hyökkääjät käyttivät SQL-injektiota kirjautumislomakkeessa saadakseen luottokorttitietoja tietokannasta.