Der SDL am Beispiel eines Gästebuchs, Teil 2
Die Demonstration von Microsofts SDL am Beispiel eines PHP-Gästebuchs geht in die zweite Runde. Nachdem Sie sich in der ersten Phase über die nötigen Grundlagen wie mögliche Schwachstellen und Angriffe informiert haben, können Sie nun die nötigen Anforderungen an die Webanwendung festlegen.
Phase 2: Anforderungen festlegen
Die Anforderungen sind bei Webanwendungen im Grunde immer gleich: Es dürfen keine bekannten Angriffe möglich sein, und die geltenden Datenschutzvorschriften müssen eingehalten werden. Mit den Datenschutzvorschriften dürfen sich die Rechtsanwälte rumschlagen, deren Vorgaben Sie dann nur noch umsetzen müssen. Damit reduzieren sich die Anforderungen für Sie als Entwickler auf einen Punkt: Jede bekannte Schwachstelle muss verhindert, jeder bekannte Angriff muss abgewehrt werden. Wenn das nicht möglich ist, müssen die möglichen Folgen eines Angriffs minimiert werden.
In diesem Zusammenhang lohnt es sich, die Angriffsfläche der Anwendung zu betrachten. Evtl. lässt die sich ja verkleinern. Die Angriffsfläche besteht aus den Punkten, an denen Daten eingegeben werden. Je kleiner die Angriffsfläche ist, desto leichter fällt die Verteidigung, wie leicht einzusehen ist.
Womit wir schon beim Entwurf sind, bei dem sich im Rahmen des SDL alles um die Frage nach den bestehenden Bedrohungen dreht. Aber zunächst müssen wir wissen, was das Gästebuch leisten soll.
Die Funktionen des Gästebuchs
Ein Gästebuch erlaubt es den Benutzern, neue Einträge anzulegen und die vorhandenen Einträgen zu lesen. Das soll natürlich auch in unserem Gästebuch möglich sein. Außerdem soll der Benutzer beim Erstellen eines Gästebuch-Eintrags seine E-Mail-Adresse angeben können, auf die nur der Administrator Zugriff hat.
Jetzt können wir festlegen, welche Funktionen es gibt und welche Daten benötigt werden.
Das Gästebuch stellt lediglich drei Funktionen bereit, die Benutzereingaben verarbeiten:
- Eine von allen Benutzern aufrufbare Funktion, die das Einfügen eines
neuen Eintrags erlaubt:
eintragen([Die Daten])
- Eine von allen Benutzern aufrufbare Funktion zum Abfragen bestimmter
Daten eines vorhandenen Eintrags:
anzeigen(ID)
- Eine nur den Administratoren des Gästebuchs zugängliche Funktion, die
das Abfragen aller Daten eines vorhandenen Eintrags erlaubt:
admin(ID)
Eine vierte Funktion, auflisten()
, gibt eine Übersicht aller
Gästebucheinträge aus und verarbeitet keine Parameter. Auf weitergehende
Funktionen z.B. zum Moderieren der Einträge, wird der Einfachheit halber
verzichtet.
Die Gästebucheinträge enthalten zwei Arten von Daten: Die, die allen Benutzern zugänglich sind, und die, auf die nur die Administratoren Zugriff haben.
- Für alle Benutzer sichtbar sind
- der Titel des Gästebucheintrags
$titel
, - der eigentliche Gästebucheintrag
$eintrag
, - der Name des Eintragenden
$name
und - optional ein URL zur Homepage des Eintragenden,
$link
.
- der Titel des Gästebucheintrags
- Zusätzliche Informationen sind nur den Administratoren
zugänglich:
- Die E-Mail-Adresse des Eintragenden
$mail
sowie - die IP-Adresse, von der aus der Eintrag vorgenommen wurde. Sie kann
der globalen Variable
$_SERVER['REMOTE_ADDR']
entnommen werden.
- Die E-Mail-Adresse des Eintragenden
Im Fall von Name, URL, E-Mail-Adresse und IP-Adresse sind die entsprechenden Datenschutzbestimmungen, insbesondere also die DSGVO, zu beachten. Was ich hier mal ausklammere. Je nach Auslegung dürfen Sie einen Teil der Daten gar nicht oder nur nach Zustimmung des Benutzers speichern.
Dies sind im auch schon fast alle Daten, die vom Programm entgegen
genommen und verarbeitet werden. Lediglich eine ID zur Auswahl des
anzuzeigenden Eintrags, $id
, kommt noch hinzu.
Alle Daten außer der ID werden beim Eintragen eines Gästebucheintrags erfasst und können vom Benutzer manipuliert werden. Auch die IP-Adresse, was leicht übersehen wird. Der Angreifer erhält dann zwar die Antwort des Servers nicht, aber die braucht er ja nicht unbedingt. Damit ergeben sich die folgenden vier Funktionsdeklarationen:
eintragen($titel, $eintrag, $name, $link, $mail, $ip)
anzeigen($id)
admin($id)
auflisten()
Die Datentypen ergeben sich von selbst:
-
$titel
,$eintrag
,$name
,$link
,$mail
und$ip
sind Strings, -
$id
ist ein Integer-Wert.
In der nächsten Folge erfahren Sie, wie Sie ein Bedrohungsmodell für das Gästebuch erstellen.
Kategorien: Grundlagen
Trackbacks
Dipl.-Inform. Carsten Eilers am : Der SDL am Beispiel eines Gästebuchs, Teil 1
Vorschau anzeigen
Dipl.-Inform. Carsten Eilers am : Der SDL am Beispiel eines Gästebuchs, Teil 5
Vorschau anzeigen
Dipl.-Inform. Carsten Eilers am : Der SDL am Beispiel eines Gästebuchs, Teil 6
Vorschau anzeigen
Dipl.-Inform. Carsten Eilers am : Der SDL am Beispiel eines Gästebuchs, Teil 7
Vorschau anzeigen
Dipl.-Inform. Carsten Eilers am : Der SDL am Beispiel eines Gästebuchs, Teil 8
Vorschau anzeigen
Dipl.-Inform. Carsten Eilers am : Der SDL am Beispiel eines Gästebuchs, Teil 9
Vorschau anzeigen