Ga naar hoofdinhoud

Wachtwoorden: waarom geen gewone tekst

Je server uit les 1 bewaart elk wachtwoord zoals de gebruiker het intypt, net als je gastenboek uit Registreren: een account opslaan en Inloggen: een wachtwoord controleren. Nu kijk je in de database, zoals iemand die het bestand in handen krijgt.

Databases lekken​

Een fout in de code, een kwijtgeraakte back-up, een beheerder die meekijkt, een laptop in de trein: vroeg of laat ligt de inhoud van een database ergens waar hij niet hoort. Staan de wachtwoorden er als gewone tekst in, dan heeft wie het bestand opent meteen alle wachtwoorden.

En dat raakt niet alleen jouw site. Veel mensen gebruiken hetzelfde wachtwoord voor hun mail, hun games en hun bank. Wie het wachtwoord van jouw gastenboek heeft, kan het daarna overal proberen.

Kijk zelf in je database​

Maak naast main.py een scriptje lees_database.py. Het lijkt op bekijk_db.py uit Alles bekijken: len en items:

from sqlitedict import SqliteDict

with SqliteDict("gebruikers.db") as db:
for naam, wachtwoord in db.items():
print(f"{naam}: {wachtwoord}")

Draai het in je tweede terminal. Het script praat niet met je server: het opent het bestand zelf.

Alles staat er, leesbaar. Er is geen inbraak in je server voor nodig: wie het bestand heeft, heeft de wachtwoorden. Dat is de zwakheid waar de volgende lessen iets aan doen.

Controlevraag
Wat heeft iemand nodig om de wachtwoorden uit jouw gebruikers.db te lezen?
Kies wat jij denkt. Bij het goede antwoord zie je de uitleg.

Er gaat iets mis​

Er verschijnt niets​

Je draait lees_database.py, en er verschijnt niets. Geen foutmelding, maar ook geen gebruikers.

Oorzaak: het script draait in een andere map dan je server. SqliteDict("gebruikers.db") zoekt het bestand in de map waarin je het script start, en bestaat het daar niet, dan maakt hij stil een nieuwe, lege database aan. Die heeft geen gebruikers. Kijk maar: in die map staat nu een tweede gebruikers.db.

Oplossing: zet de scriptjes in dezelfde map als main.py, start ze vanuit de terminal in die map, en gooi de lege gebruikers.db in de andere map weg.

Opdrachten​

Opdracht 1: Predict - Wie heeft wat?​

Een vierde gebruiker, Tim, registreert met het wachtwoord geheim.

Vraag: welke regel komt er bij in de uitvoer van lees_database.py?

Antwoord
tim: geheim

De server bewaart wat Tim intypt, dus dat is ook wat je terugziet.

Opdracht 2: Investigate - Wie heeft er iets aan?​

Stel dat gebruikers.db van jouw gastenboek uitlekt. Noem twee dingen die iemand met dit bestand kan doen, buiten jouw site.

Tip

Denk aan mensen die voor meer sites hetzelfde wachtwoord gebruiken.

Antwoord

Bijvoorbeeld: met de naam en het wachtwoord van Sara inloggen op andere sites waar zij hetzelfde wachtwoord gebruikt, zoals haar mail of een game. En zien dat Sara en Noor hetzelfde wachtwoord hebben, en dat dus ook bij Noor proberen. Daarom bewaart een site een wachtwoord nooit als gewone tekst.

Door naar les 3: wat een hash is.