SQL‐injektio - TiViOpetus/Autolainaus GitHub Wiki

Tietokannan suojaaminen pahantahtoisilta käyttäjiltä

Erityisesti selaimella ilman käyttäjän luotettavaa tunnistamimista toimivat sovellukset ovat alttiita erilaisille hyökkäyksille. Yksi yleisimmistä hyökkäyksistä on SQL-injektio. Siinä hyökkääjä syöttää käyttöliittymään arvon, joka sisältää SQL-koodia. Jos sovellus on rakennettu huonosti ja sovelluksen käyttöoikeuksia ei ole rajoitettu, seuraukset voivat olla tuhoisia.

Sovelluskehittäjän ajatus SQL-lauseesta ja käyttöliittymästä, jolla lisätään rivi asiakas-tauluun:

image

INSERT INTO asiakas (nimi, ika) VALUES ('Kunto Kalpa', 57)

Pahantahtoinen käyttäjä hyödyntää SQL-injektiota syöttämällä datan lisäksi myös SQL-koodia:

image

-- Tallennetaan asiakkaan tiedot asiakas-tauluun
INSERT INTO asiakas (nimi, ika) VALUES ('Jonne Janttari', 17); DELETE FROM asiakas --)

Koodikatkelmassa hakkeri on syöttänyt käyttöliittymän lineEdit-elementiin tiedon, mutta sen lisäksi myös muita merkkejä. Luvun 17 perään on syötetty ylimääräinen ) Se päättää alkuperäisen lauseen. ;:n jälkeen on kirjoitettu toinen komento, jolla taulun tiedot pyyhitään. Jotta alkuperäisen koodin päättävä sulje ei aiheuttaisi virheilmoitusta haittakoodin perään on lisätty kommentin tunniste --

Sovelluksen koventaminen

Sovellusta tehtäessä mahdolliset injektioyritykset on pidettävä mielessä. Kaikelta ei kuitenkaan voi suojautua, jolloin riskianalyysin tekeminen on järkevää. Jos kyseessä on räätälöity työpöytä sovellus, jota käyttävät luotettavat ihmiset suojautumiseen riittää käyttöoikeuksien minimointi: ei anneta sovellukselle tai käyttäjälle yhtään enempää oikeuksia, kuin käyttämiseen tarvitaan. Oletuskäyttäjätunnukset ja salasanat ovat luonnollisesti kiellettyjä.

1. Tietokannan hallintajärjestelmän suojauskeinot:

  • Sovellukselle tai sen käyttäjälle annetaan minimioikeudet
  • Korvataan SQL-lauseet proseduureilla ja funktioilla tietojen päivityksissä
  • Tehdään haut näkymien kautta, joilla voi olla pelkkä lukuoikeus

2. Käytetään tietokantakirjaston tai ORM:n valmiita funktioita:

  • Ei muodosteta suoraan upotettuja SQL-lauseita ohjelmakoodiin

ORM Object Relational Mapping on termi, jota käytetään kirjastosta tai ohjelmasta, joka muuntaa tietokannan taulurakenteen ohjelmointikielen objektirakenteeksi.

3. Kirjoitetaan omaan koodiin tarkistukset injektioiden varalta:

  • Poistetaan elemettien merkkijonoista erikoismerkit ;, ' tai --
  • Tehdään tarvittaessa sanakirja SQL-komennoista ja poistetaan ne käyttöliittymästä saatavista merkkijonoista