Skip to content

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 im ersten Schritt ü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.

Schritt 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:

  1. Eine von allen Benutzern aufrufbare Funktion, die das Einfügen eines neuen Eintrags erlaubt: eintragen([Die Daten])
  2. Eine von allen Benutzern aufrufbare Funktion zum Abfragen bestimmter Daten eines vorhandenen Eintrags: anzeigen(ID)
  3. 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.
  • 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.

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.

Carsten Eilers

>
        </div>
                
        <footer class= Kategorien: Grundlagen

Trackbacks

Dipl.-Inform. Carsten Eilers am : Der SDL am Beispiel eines Gästebuchs, Teil 1

Vorschau anzeigen
In den vorherigen Folgen haben Sie Microsofts Security Development Lifecycle kennen gelernt. Vielleicht hat Sie ja dessen Umfang erschreckt: Sieben Phasen (1 &amp; 2, 3 &amp; 4, 5 &amp; 6 und 7), von denen fünf jeweils drei Schritte umfas

Dipl.-Inform. Carsten Eilers am : Der SDL am Beispiel eines Gästebuchs, Teil 5

Vorschau anzeigen
Die Demonstration von Microsofts SDL am Beispiel eines PHP-Gästebuchs geht in die fünfte Runde. Im ersten Schritt haben Sie sich über die nötigen Grundlagen wie mögliche Schwachstellen und Angriffe informiert, und im zweit

Dipl.-Inform. Carsten Eilers am : Der SDL am Beispiel eines Gästebuchs, Teil 6

Vorschau anzeigen
Die Demonstration von Microsofts SDL am Beispiel eines PHP-Gästebuchs geht weiter. Im ersten Schritt haben Sie sich über die nötigen Grundlagen wie mögliche Schwachstellen und Angriffe informiert, und im zweiten die nötig