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.
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.