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ötekenttään manipuloidakseen tietokantaa.
Tämä hyökkäys kohdistuu sovelluksiin, jotka eivät käsittele asianmukaisesti validointia ja käyttäjän syötettä, mahdollistaen luvattoman pääsyn arkaluonteisiin tietoihin, kuten salasanoihin tai luottokorttitietoihin jne.
Miten SQL-injektio toimii
Kun sovellus sisällyttää suoraan käyttäjän syötteen 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 true, mahdollistaen luvattoman pääsyn.
Miksi SQL-injektio on tärkeä kyberturvallisuudessa
SQL-injektio on kyberturvallisuuden vaarallisin ja vanhin tekniikka. Tämä hyökkäystyyppi on jatkuvasti listattu OWASP Top 10:ssä.
Jopa pienet haavoittuvuudet mahdollistavat hyökkääjän:
- Pääsy, muokkaus tai tietojen poistaminen
- Autentikoinnin ohittaminen
- Hallinnollisten toimintojen suorittaminen tietokannassa.
- Järjestelmän täydellinen 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 tuloksia useista kyselyistä.
- Virhepohjainen SQLi: Perustuu tietokannan virheilmoituksiin tietojen saamiseksi.
- Aikapohjainen sokea SQLi: Hyödyntää palvelimen vasteviiveitä arvatakseen 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ötettä datana, ei suoritettavana koodina.
cursor.execute("SELECT * FROM users WHERE username = ?", (username,))
2. Syötteen validointi ja puhdistus
Validoi kaikki käyttäjien syötteet, 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än oikeuden periaate
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 injektiohaavoittuvuudet aikaisessa vaiheessa.
Esimerkki tosielämästä
Verkkokauppasivusto kärsi tietomurrosta, jossa hyökkääjät käyttivät SQL-injektiota kirjautumislomakkeessa saadakseen luottokorttitietoja tietokannasta.
Liittyvät termit
- XSS (Cross-Site Scripting)
- DAST (Dynamic Application Security Testing)
- OWASP Top 10
- Sovellusten tietoturvatestaus