Kapitel 24
Datenbanken
666
Das CGI-Skript redaktion.py enthält zwei Klassen Person und Beitrag, die Redakteure
und Beträge des Online-Journals modellieren. Beide Klassen sind mit Tabellen der Daten-
bank »verbunden«, die entsprechende Namen tragen. Zum Beispiel können Objekte der
Klasse
Person die Tabelle person befragen und verändern. Abbildung 24.8 zeigt ein UML-
Klassendiagramm.
Die Methoden dieser Klassen haben unmittelbar mit dem Verändern oder Verarbeiten der
Daten zu tun, die durch die jeweilige Klasse bzw. ihre Objekte repräsentiert werden.
Abb. 24.8: UML-Klassendiagramm für das CGI-Skript redaktion.py
24.6.3 Hintergrund: Authentifizieren mit MD5-Fingerprints
Eine wichtige Aufgabe, die ein Datenbanksystem bewältigen muss, ist die sichere Authenti-
fizierung der Benutzer. Das zurzeit gebräuchlichste Verfahren ist die Eingabe eines (in der
Regel öffentlichen) Login-Namens und eines geheimen Passwortes, das nur der jeweilige
Benutzer kennt. Das System prüft dann mithilfe der Datenbank erstens, ob ein Benutzer
mit diesem Login-Namen registriert ist, und zweitens, ob das Passwort stimmt.
An dieser Stelle stoßen wir auf ein Problem. Wie kann man gewährleisten, dass ein Pass-
wort wirklich geheim bleibt? Damit das System das Passwort eines Benutzers prüfen kann,
muss es in irgendeiner Weise gespeichert werden. Falls man Passwörter im Klartext in einer
Datei speichern würde, besteht aber die Gefahr, dass irgendjemand (z.B. der Systemadmi-
nistrator) diese Datei liest und sich nicht autorisierten Zugang zum DBS verschafft. Es ist
nun aber möglich, nicht das Passwort selbst, sondern eine verschlüsselte Version zu ver-
wenden, die mit dem MD5-Verfahren erstellt worden ist.
Der MD5-Algorithmus wurde von Ronald L. Rivest entwickelt und im Jahre 1992 veröffent-
licht. MD5 nimmt einen String beliebiger Länge als Eingabe und erzeugt einen so genannten
»Fingerabdruck« (fingerprint) oder »Message Digest«. Dieser ist ein String aus 16 Zeichen
(128 Bit). Die Wahrscheinlichkeit, dass zwei Strings denselben MD5-Fingerabdruck ergeben,
ist äußerst gering. Er kann also näherungsweise – wie ein richtiger Fingerabdruck – als »ein-
malig« betrachtet werden. Der MD5-Algorithmus ist eine Einwegfunktion; das ist eine Funk-
tion, zu der es keine Umkehrfunktion mit vernünftiger Rechenzeit gibt. Abbildung 24.9
versucht, das Prinzip zu veranschaulichen.
In unserem Fall heißt das: Zu dem Fingerprint eines Passwortes kann man (praktisch) nicht
mehr das Original-Passwort berechnen. Der Fingerprint kann also getrost in einer Daten-
bank gespeichert werden. Das Passwort bleibt dennoch unbekannt. (Das einzige – nicht
unerhebliche – Sicherheitsrisiko in unserem System ist die Übertragung des Passworts
über das Internet.)
Person
id_ok()
aktualisiere_pw()
name
passwort
db
Beitrag
publiziere()
aktualisiere_news()
titel
text
verfallsdatum
db
autor
Pfad zur Datenbank-Datei
Beitrag in Datenbank speichern
prüfen, ob Passwort dem ge-
speicherten Fingerprint entspricht
neuer Fingerprint für neues
Passwort
Aus allen gespeicherten
Beiträgen Webseite aufbauen

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.