HAKATEMIA
33Backend-perusteet

Tietokantayhteydet

Helppo5MIN

Katsotaan seuraavaksi miten taustajärjestelmä yhdistetään tietokantaan jotta sovellus voi tallentaa, muokata, hakea ja poistaa tietoja.

Vanha, vaarallinen tapa

Ennen vanhaan oli tyypillistä että web-sovellukset juttelivat tietokannan kanssa raakoja SQL-kyselyitä rakentamalla, usein yhdistäen käyttäjän syötettä kyselyyn. Jos ajatellaan vaikkapa yksinkertaista tehtävälistasovellusta, niin koodi joka lisää uuden tehtävän voisi näyttää tältä:

PY
1@app.route('/todos', methods=['POST'])
2def create_todo():
3    title = request.form['title']
4    result = connection.execute(f"INSERT INTO todos (title) VALUES ('{title}')")
5    todo_id = result.lastrowid
6    return '', 204
7

Jos muistat HTML-pohjia käsittelevästä moduulista että tällainen vanhanaikainen malli HTML-rakennuksessa johti XSS-haavoittuvuuksiin, voit ehkä jo arvata minkälainen haavoittuvuus tästä tulee? Oikea vastaus on SQL-injektio. Jos käyttäjä syöttäisi title -muuttujassa heittomerkin, niin käyttäjähän voisi muuttaa SQL-kyselyn rakennetta mielensä mukaan.

SQL-injektioista voi oppia lisää Hakatemian SQL-injektiokurssilla, mutta katsotaan nyt oikea, moderni tapa käyttää tietokantaa web-sovelluksen taustajärjestelmästä.

1 / 4
Hakatemia Pro

Hakkeroinnin oppiminen alkaa tästä

Sadat interaktiiviset kurssit, virtuaalilabrat ja CTF-haasteet selaimessasi. Aloita ilmainen kokeilu ilman korttitietoja.