Mehr Sicherheit mit "Session State Security"

Die Möglichkeit, Seitenelemente per URL anzusteuern, ist eine besonders angenehme Eigenschaft der HTML DB - dadurch lässt sich die Navigation in einer Anwendung ganz einfach durch die Verwendung von Links realisieren (Abbildung 1). Eine kleine Testanwendung mit den Tabellen EMP und DEPT steht Ihnen hier zur Verfügung.

Eine Anwendung mit Bericht und Formular als Ausgangssituation
Abb.1: Eine Anwendung mit Bericht und Formular als Ausgangssituation

Anderseits sind Anwendungen so anfällig für URL-Manipulationen - Kennt man das URL-Format der HTML DB ...

f?p=[APP_ID]:[PAGE_ID].[SESSION_ID]:[REQUEST]:[DEBUG]:[CLEAR_CACHE]:[ITEM_NAMES]:
[ITEM_VALUES]:[PRINTER_FRIENDLY]

... so muss man zum Ändern einer Zeile nicht mehr auf den "Bleistift" klicken - vielmehr kann man das Formular direkt mit der "richtigen" URL aufrufen:

f?p=105:2:10013378274188147599::::P2_EMPNO:7839

Während das in diesem Beispiel unproblematisch ist, könnte es in anderen Anwendungen ein Problem sein - je nachdem wie die Formulare implementiert sind, ergibt sich vielleicht eine Sicherheitslücke. Generell lassen sich Probleme dieser Art bereits im Vorfeld durch Einsatz der Virtual Private Database, welche vor einigen Wochen bereits hier vorgestellt wurde, verhindern.

In diesem Tipp lesen Sie, wie Sie URL-Manipulationen von vorneherein verhindern können. Die HTML DB bietet ab der Version 2.0 Session State Security an. Wenn die HTML DB damit den Sitzungsstatus schützt, ist es nicht mehr möglich, den Wert von HTML DB-Elementen durch entsprechend formulierte URL zu ändern. Zum Aktivieren navigieren Sie zunächst zu den Anwendungsattributen und von dort aus zu den Sicherheitsattributen

Anwendungsattribute: Aktivieren der "Session State Security"
Abb.2: Aktivieren der "Session State Security" in den Anwendungsattributen (Sicherheit)

Stellen Sie zunächst den Status auf Aktiviert und speichern Sie die Attribute durch Klick auf die Schaltfläche Änderungen anwenden (ganz oben rechts). Navigieren Sie dann nochmals zu den Sicherheitsattributen und klicken Sie die Schaltfläche Schutz für den Session-Status verwalten. Es geht nun um die Festlegung, welche Seiten und welche Attribute vom Schutz betroffen sein sollen.  Da in unserem Beispiel die Seite 2 geschützt werden soll, klicken Sie Seite an und wählen Sie in der dann folgenden Übersicht die Seite 2 aus. 

Einstellungen zur "Session State Security" für Seite 2
Abb.3: Einstellungen zur "Session State Security" für Seite 2

Abbildung 3 zeigt Ihnen die Möglichkeiten, Session State Security für eine in Ihrer Anwendung zu konfigurieren. Die Stati haben folgende Bedeutung:

  • Uneingeschränkt
    Kein Schutz 
  • Argumente müssen Prüfsumme haben
    Die Seite kann per URL aufgerufen werden, sollen Elemente jedoch (wie im Beispiel oben) direkt mit Werten versehen werden, so muss eine Prüfsumme (Checksum) mitgeliefert werden,
  • Keine Argumente zulässig
    Die Seite kann per URL aufgerufen werden, die Änderung des Session-Status per URL ist jedoch nicht möglich.
  • Kein URL-Zugriff
    Die Seite kann per URL nicht mehr aufgerufen werde, sie ist nur noch mit HTML DB-Verzweigungen (Page Branches) erreichbar.

Die letzte Option ist insbesondere dann interessant, wenn Sie eine bestimmte Navigation in Ihrer Anwendung auf jeden Fall durchsetzen wollen. Eine Seite kann dann nicht mehr direkt per URL aufgerufen werden. Die normalen HTML DB-Verzweigungen funktionieren jedoch auch weiterhin. Wählen Sie für Ihr Beispiel Argumente müssen Prüfsumme (Checksum) haben aus.

Einstellungen zur Checksumme für das Element EMPNO

Abb. 4: Einstellungen zur Checksumme für das Element EMPNO

Legen Sie nun noch für jedes Element, welches Sie schützen möchten, die Ebene für die Berechnung der Prüfsumme fest. Sie kann auf Session-, auf Benutzer- oder auf Anwendungsebene berechnet werden. Die Session-Ebene bietet den höchsten Schutz - macht Bookmarks auf diese Seite jedoch unmöglich. Wenn Sie dem Anwender noch erlauben möchten, Bookmarks zu setzen, müssen Sie die Benutzerebene wählen. Sollen die Bookmarks zwischen verschiedenen Nutzern ausgetauscht werden können, wählen Sie Anwendungsebene. Für dieses Beispiel wählen Sie die Session-Ebene. Speichern Sie Ihre Änderungen anschließend ab. 

Versuchen Sie nun nochmals, die Seite direkt per URL aufzurufen. Zunächst ohne Parameter ...

f?p=105:2:10013378274188147599

... das funktioniert wie gehabt. Versuchen Sie nun, den Session-Status per URL zu setzen:

f?p=105:2:10013378274188147599::NO::P2_EMPNO:7839

Session-State-Security: Fehlermeldung bei Schutzverletzung

Gehen Sie nun auf Seite 1 und klicken Sie dort nochmals auf den "Bleistift". Wenn Sie sich nun die URL ansehen, stellen Sie fest, dass diese nun eine Prüfsumme (Checksum) enthält.

f?p=105:2:10013378274188147599::NO::P2_EMPNO:7698&cs=3517BAA003F4827D0F9E79B770FF18B25

Diese können Sie nun kopieren ... und innerhalb der gleichen Session beliebig wiederverwenden. Sobald Sie jedoch eine neue Sitzung starten, wird sie ungültig. Stellen Sie den Schutz daher im folgenden so um, dass es möglich wird, die URL als Bookmarks zu verwenden und ggfs. auszutauschen. Navigieren Sie dazu wieder zu den Sicherheitsattributen und von dort aus zur Session-State Security für Seite 2. 

Einstellungen zur "Session State Security" für Seite 2
Abb.6: Einstellungen zur "Session State Security" für Seite 2

Stellen Sie den Elementschutz für P2_EMPNO nun auf Prüfsumme erforderlich: Anwendungsebene um. Wenn Sie nun erneut testen, stellen Sie fest, dass alles genauso funktioniert wie vorhin. Ein Klick auf den "Bleistift" führt auf das Formular - wenn Sie die URL jedoch kopieren und in einer anderen Session wiederverwenden möchten, bekommen Sie die Fehlermeldung. Das liegt daran, dass die Seite 2 nun zwar eine Prüfsumme auf Anwendungsebene akzeptiert - das Bericht generiert jedoch eine Prüfsumme auf Session-Ebene - das ist der Standard. Dies stellen Sie in den Berichtseigenschaften zur Spalte EMPNO ein. Navigieren Sie dort zum Bereich Link.

Berichtseigenschaften: Link zum Formular (Spalte EMPNO)
Abb.7: Berichtseigenschaften: Link zum Formular (Spalte EMPNO)

Stellen Sie die Berechnung der Seiten-Prüfsumme auf Anwendungsebene um und speichern Sie Ihre Änderungen. Danach funktioniert die Anwendung wie gewünscht. Sie können vom Bericht zum Formular navigieren und darüber hinaus die URL kopieren, in einer anderen Session wiederverwenden oder sogar einem Kollegen schicken. Es ist jedoch nicht möglich, den Sitzungsstatus per URL-Manipulationen zu ändern.

Die Prüfsummenberechnung im Bericht muss sich immer nach dem Formularelement mit der höchsten Schutzebene richten. Erfordert nur ein Element im Formular eine Prüfsumme auf Session-Ebene, so muss der Bericht auch eine solche generieren - Benutzer- oder Anwendungsebene reichen dann nicht mehr aus.

Zurück zur Community-Seite