Web-Applikationen sicher entwickeln

In fünf Schritten zur sicheren Web-Anwendung

2. Architektur und Design

In der Architektur- und -Designphase werden die wesentlichen Komponenten der Anwendung mit ihren Funktionen beschrieben. Außerdem gilt es, die Schnittstellen zwischen den Komponenten zu spezifizieren und den Datenfluss zu modellieren. Ferner werden alternative Lösungsvarianten aufgezeigt und anhand einer Wirtschaftlichkeitsbetrachtung bewertet. Folgende sicherheitsrelevante Aufgaben sind in dieser Phase zu erledigen:

  • Bedrohungs-, Schwachstellen- und Restrisikoanalyse;

  • risikosenkende Maßnahmen müssen definiert und spezifiziert werden;

  • Architektur- und Designvorschläge sind zu erstellen - unter Berücksichtigung von Best Practices (Security Design Patterns) beispielsweise zur Umsetzung des fachlichen Berechtigungskonzepts;

  • Architektur- und Design-Reviews - auch im Hinblick auf die identifizierten Sicherheitsanforderungen;

  • Tests zur Überprüfung der Sicherheitsfunktionen müssen spezifiziert werden.

In unserem Beispiel wird für Authentisierung, Autorisierung und Session-Management auf Security Design Patterns zurückgegriffen. Eine Zwei-Faktor-Authentisierung mittels SMS-Bestätigung soll Phishing- oder Trojaner-Attacken erschweren. Für eine komfortable Administration wird ein einfaches Rollenkonzept mit normalen Benutzern und Administratoren eingeführt.

Als zusätzlicher "Defense-in-Depth"-Ansatz sollen Zugriffe mehrfach, an verschiedenen Layern der Applikation, geprüft werden. Die erste Schutzschicht auf Ebene der Requests prüft, ob für den Zugriff auf eine spezielle URL ausreichende Rechte vorhanden sind. Die zweite Schutzschicht auf dem Service-Layer stellt sicher, dass auch für den Aufruf einer bestimmten Servicefunktion entsprechende Rechte vorliegen. Die dritte Schutzschicht auf Datenebene sorgt dafür, dass beim Zugriff auf das DAO (Data Access Object) nur Daten zurückgeliefert werden, auf die rechtmäßig zugegriffen werden darf. Eingaben von Benutzern werden so streng wie möglich validiert. Beispiel Postleitzahlenfeld: Da nur Kunden in Deutschland unterstützt werden, wird geprüft, ob die angegebene Nummer fünf Stellen hat.

Um gegen Injection-Angriffe gefeit zu sein, werden im Vorfeld alle integrierten Interpreter ermittelt und zentrale Maskierungsfunktionen für den jeweiligen Kontext zur Verfügung gestellt. Beispiel: HTML- oder Javascript-Code wird durch spezielle JSTLs (Javaserver Pages Standard Tag Library) maskiert.