42
ALLES IN DIE SESSION NIX IM BROWSER Stefan Pantke http://www.meetup.com/phpughh/ Mittwoch, 13. Februar 13

Alles in die Session, nichts im Browser!

  • Upload
    apets

  • View
    756

  • Download
    0

Embed Size (px)

DESCRIPTION

Der Vortrag beschreibt eine Technik, die den gesamten Zustand einer Anwendung serverseitig in einer Session verwaltet. Der konventionelle Transfer von Parametern per GET und POST wird durch die Technik vermieden - dies schließt die Namen von Controllern oder IDs von views ein. Durch Nutzung der Technik werden zwischen Browser und Server ausschließlich sog. FlowGroupID und FlowIDs transferiert. Diese IDs werden so generiert, dass sie einerseits zufällig und andererseits so lang sind, dass sie nicht vorhersehbar sind. Eine FlowGroupID determiniert eine Webseite, eine FlowID eine Instanz eines Controllers mitsamt seiner Aufrufparameter, die in einem FLOW konserviert wird. Das Konzept eines FLOWs ist ähnlich einem activation-record. Während jedoch ein activation-record bestimmt, wie eine Funktion/Methode aufgerufen wurde, definiert ein FLOW, wie ein Controller einer Web-Anwendung in der Zukunft aufgerufen werden darf. Die Technik stellt sicher, dass eine Web-Anwendung nur erlaubte Zustandsübergänge - erlaubte Links - ausführen kann. Denn jeder ausgeführte Controller definiert die Gesamtmenge aller im nächsten HTTP-request ausführbaren Controller mitsamt ihrer Parameter. Angriffs-Vektoren, die auf der Manipulation von GET und POST Parametern basieren, werden durch den Einsatz der vorgestellten Technik unwirksam. Zudem werden Angriffsvektoren eliminiert, die auf dem Aufruf von HTTP-requests basieren, die im aktuellen Zustand einer Anwendung nicht hätten aufgerufen werden dürfen bzw. dessen Aufruf der verantwortliche Anwendungsentwickler nicht vorhergesehen / abgefangen hat. Während der ersten öffentlichen Präsentation im Rahmen der PHP User Group Hamburg - http://www.meetup.com/phpughh/events/94999962/ - wurden folgende Anmerkungen [H] gemacht: H: Die Technik sei nicht RESTful. A: Korrekt in dem Sinne, dass die Technik HTTP bzw. die Interaktion eines Browsers mit einem Webserver in gewissem Sinne eben gerade stateful macht, also gerade nicht RESTful. H: Die Technik skaliere nicht. A: Skalierbarkeit ist ein sehr weit gefasster Begriff. In voller Allgemeinheit würde ich der Aussage zurzeit nicht zustimmen. H: Die Technik verhindere, dass man eine Web-Anwendung in zwei Fenstern ausführen kann. A: In der präsentierten Version ist dies korrekt. Die vorgestellte Technik ist jedoch diesbezüglich problemlos generalisierbar. H: Die Technik behindere die Nutzung der Browser-Funktionen VOR und ZURÜCK. A: Korrekt. Die vorgestellte Technik ist jedoch insbesondere bezüglich ZURÜCK generalisierbar. H: Die Technik generiere vergleichsweise große Sessions A: Korrekt. Das Einfrieren von zukünftigen Controller-Instanziierungen in FLOWs erfordert Platz. H: Apache Wicket - http://wicket.apache.org/ - habe gewisse Ähnlichkeiten. A: Vielen Dank für den Hinweis auf Wicket!

Citation preview

Page 1: Alles in die Session, nichts im Browser!

ALLES IN DIE SESSIONNIX IM BROWSER

Stefan Pantke

http://www.meetup.com/phpughh/Mittwoch, 13. Februar 13

Page 2: Alles in die Session, nichts im Browser!

∼ ∼ FRAGE I ∼ ∼

WARUM MUSS EINE ANWENDUNG GESCHÜTZT WERDEN?

Mittwoch, 13. Februar 13

Page 3: Alles in die Session, nichts im Browser!

AUS FORMALEN GRÜNDEN• Bundesdatenschutzgesetz [BDSG]

• Verbotsprinzip mit Erlaubnisvorbehalt

• Alle personenbeziehbaren Daten sind zu schützen

• Besondere Daten - Ethnische/Rassische Herkunft, politische Meinung, religiöse / philosophische Überzeugung, Gewerkschaftszugehörigkeit, Gesundheit und Sexualleben

• Besondere Daten sind besonders zu schützen

Mittwoch, 13. Februar 13

Page 4: Alles in die Session, nichts im Browser!

BDSG

Mittwoch, 13. Februar 13

Page 5: Alles in die Session, nichts im Browser!

∼ ∼ FRAGE II ∼ ∼

WOGEGEN MUSS EINE ANWENDUNG GESCHÜTZT WERDEN

Mittwoch, 13. Februar 13

Page 6: Alles in die Session, nichts im Browser!

NEULICH BEI D-LINK

Quelle: http://www.heise.de/security/meldung/Sicherheitsalarm-fuer-D-Link-Router-1796519.html

Mittwoch, 13. Februar 13

Page 7: Alles in die Session, nichts im Browser!

MEETUP.COM VERSCHICKT E-MAILMIT VERIFIKATIONS-LINKS,

DIE LOGIN DURCHFÜHREN

Mittwoch, 13. Februar 13

Page 8: Alles in die Session, nichts im Browser!

OWASP TOPTEN 2010• SQL injection

• Cross site scripting

• Broken authorization-/sessionmngmnt.

• Insecure direct object

• Cross site request forgery

• Security misconfiguration

• Insecure cryptographic storage

• Failure to restrict URL access

• Insufficent transport layer security

• Unvalidated redirects and forwards

Mittwoch, 13. Februar 13

Page 9: Alles in die Session, nichts im Browser!

ASSERTIONSEXCEPTIONS

ESCAPING VON QUERIES

INPUT VALIDATION

VERSCHLÜSSELUNG

ANTIQUITÄTEN [MAGIC QUOTES]

ORGANISATION DES FILESYSTEMS

PROTOKOLLIERUNG

Nicht heute

Mittwoch, 13. Februar 13

Page 10: Alles in die Session, nichts im Browser!

∼ ∼ SCHON ERLEBT ? ∼ ∼

WENN ANWENDER ZU SCHLAU ODER ZU UNGESCHICKT IST...

Mittwoch, 13. Februar 13

Page 11: Alles in die Session, nichts im Browser!

ANWENDER SPEICHERT BOOKMARK ANWENDER GIBT LINK WEITER

ANWENDER EDITIERT URL

• Falls Anwendung mangelhaft implementiert ist, dann

• sieht Anwender oder Dritter Daten, die er nicht sehen darf

• löst Anwender Funktion aus, die die falschen Datensätze manipuliert oder löscht

Mittwoch, 13. Februar 13

Page 12: Alles in die Session, nichts im Browser!

∼ ∼ ZEN MEDITATION ∼ ∼

ZIELLOSER ANWENDER KÖNNTE

ZIELGERICHTETER ANGREIFER SEIN

Mittwoch, 13. Februar 13

Page 13: Alles in die Session, nichts im Browser!

https://www.owasp.org/index.php/File:2010-T10-ArchitectureDiagram.png

Mittwoch, 13. Februar 13

Page 14: Alles in die Session, nichts im Browser!

OWASP TOPTEN 2010• SQL injection

• Cross site scripting

• Broken authorization-/sessionmngmnt.

• Insecure direct object

• Cross site request forgery

• Security misconfiguration

• Insecure cryptographic storage

• Failure to restrict URL access

• Insufficent transport layer security

• Unvalidated redirects and forwards

Mittwoch, 13. Februar 13

Page 15: Alles in die Session, nichts im Browser!

∼ ∼ NIX IST KOSTENLOS ∼ ∼

SICHERHEIT VS. BEQUEMLICHKEIT

Mittwoch, 13. Februar 13

Page 16: Alles in die Session, nichts im Browser!

∼ ∼ MEHR ALS 99% ∼ ∼

ALLE WEB-ANWENDUNGEN LAUFEN GLEICH AB

Mittwoch, 13. Februar 13

Page 17: Alles in die Session, nichts im Browser!

VORWÄRTS UND ZURÜCK

Kunde suchen

Kunde anzeigen

Vertrag hinzufügen

1

2

3

4

Mittwoch, 13. Februar 13

Page 18: Alles in die Session, nichts im Browser!

GESPIEGELT UND GEDREHT

Kunde suchen

Kunde anzeigen

Vertrag hinzufügen

1

2

3

4

Kunde suchen

Kunde anzeigen

Vertrag hinzufügen

1

2

3

4

Kunde suchen

Kunde anzeigen

Vertrag hinzufügen

1

2

3

4

Kunde suchen

Kunde anzeigen

Vertrag hinzufügen

1

2

3

4

Mittwoch, 13. Februar 13

Page 19: Alles in die Session, nichts im Browser!

1

1.1 1.2 1.3

1

1.1

1.1.21.1.1 1.1.3

1.1.21.1.1

AUSWÄHLEN UND WEITER

Mittwoch, 13. Februar 13

Page 20: Alles in die Session, nichts im Browser!

∼ ∼ STANDARD ∼ ∼

AUFGERUFENER PRÜFTDAS WIE DER AUSFÜHRUNG

Mittwoch, 13. Februar 13

Page 21: Alles in die Session, nichts im Browser!

∼ ∼ ERWEITERT ∼ ∼

AUFGERUFENER PRÜFTDAS WIE DER AUSFÜHRUNG

AUFRUFER DEFINIERT WANN WAS PASSIEREN DARF

Mittwoch, 13. Februar 13

Page 22: Alles in die Session, nichts im Browser!

OK! ABER WIE GEHT ES GENAU?

Mittwoch, 13. Februar 13

Page 23: Alles in die Session, nichts im Browser!

Flow

ArtikelID => 485

PersonID => 42

CArtikelFlow

Info => 'Bitte tragen...'

CArtikelFlow::CreateSub

FLOWFlow definiert Controller-Aufruf mit allen Parametern.

CFlow::createFlow()CFlow::addFlowParam()

Mittwoch, 13. Februar 13

Page 24: Alles in die Session, nichts im Browser!

Flow

parent:EArtikel => 485

owner:EPerson=> 42

CArtikelFlow

Info => 'Bitte tragen...'

CArtikelFlow::CreateSub

FLOW

Typehints erzeugen Entitäten bestimmten Typs.

CFlow::addFlowParam()

Mittwoch, 13. Februar 13

Page 25: Alles in die Session, nichts im Browser!

FlowGroup

1.1

1.2

1.3

1.4

FLOWGROUP

Definiert Menge von Flows, von denen eine ausgeführt werden kann. Links auf einer Webseite.

CFlow::createFlowGroup()

Mittwoch, 13. Februar 13

Page 26: Alles in die Session, nichts im Browser!

FlowGroup

1.1

1.2

1.3

1.4

FLOWGROUP

Ausführung eines Flows invalidiert alle Alternativen.

CFlow::executeFlow()CFlow::invalidateExcept()

Mittwoch, 13. Februar 13

Page 27: Alles in die Session, nichts im Browser!

FG 1

FG 1.2

FG 1.2.1

FLOWGROUP

FlowGroup kennt Vorgänger und Nachfolger.

Vorgänger ist ZURÜCK oder ABBRECHEN Link auf jeder Seite.

Mittwoch, 13. Februar 13

Page 28: Alles in die Session, nichts im Browser!

FG 1

FG 1.2

FG 1.2.1

FLOWGROUP

Terminierung von FlowGroup setzt Vorgänger fort.

CFlow::terminateFlowGroup()

Mittwoch, 13. Februar 13

Page 29: Alles in die Session, nichts im Browser!

∼ ∼ ISOLATION ∼ ∼

CONTROLLER SAGT NUR,ICH BIN FERTIG‘

Mittwoch, 13. Februar 13

Page 30: Alles in die Session, nichts im Browser!

FG 1

FG 1.2

PFG A

PFG A

PFG A

Permanent

TransientGLOBALES

Globale Links überdauern ihren Aufruf

CFlow::createPermanentFlow()

Mittwoch, 13. Februar 13

Page 31: Alles in die Session, nichts im Browser!

FG 1

FG 1.2

FG 1.2.1

EXCEPTION!

User nicht berechtigt? Es geht geordnet weiter...

CFlow::terminateFlowGroup()

Mittwoch, 13. Februar 13

Page 32: Alles in die Session, nichts im Browser!

FG 1

FG 1.2

FG 1

FG 1.2

FG 1.2.1

FG 1.2.1.5

FG 1.2.1.5.7

MULTISTEP

Mehrschrittige Prozesse durch mehrere FlowGroups

Mittwoch, 13. Februar 13

Page 33: Alles in die Session, nichts im Browser!

Session

http://myServer/doLogin

TransientPerm

anent

Mittwoch, 13. Februar 13

Page 34: Alles in die Session, nichts im Browser!

Session

http://myServer/

PFG A

PFG A

PFG A

TransientPerm

anent

Mittwoch, 13. Februar 13

Page 35: Alles in die Session, nichts im Browser!

Session

http://myServer/

PFG A

PFG A

PFG A

TransientPerm

anentFlowGroup

1.1

1.2

1.3

1.4

ABCDEFGHIJ:1234567890

ID der FlowGroupID des Flows

Mittwoch, 13. Februar 13

Page 36: Alles in die Session, nichts im Browser!

Session

IDs von FlowGroups

IDs von Flows

Controller/Parameter

Browser

ID der Session

IDs aktueller FLows

Hidden Parameter

GET-/POST-Parameter

IDS SIND NICHT VORHERSEHBAR

Mittwoch, 13. Februar 13

Page 37: Alles in die Session, nichts im Browser!

∼ ∼ VISION ∼ ∼

DEFINIERE, WAS WANN PASSIEREN DARF

IN EINER ZENTRALEN DSL

Mittwoch, 13. Februar 13

Page 38: Alles in die Session, nichts im Browser!

Flow

parent:EArtikel => 485

owner:EPerson=> 42

CArtikelFlow

Info => 'Bitte tragen...'

CArtikelFlow::CreateSub

Flow

parent:EArtikel => 485

owner:EPerson=> 42

CArtikelFlow

Info => 'Bitte tragen...'

CArtikelFlow::CreateSub

Flow

parent:EArtikel => 485

owner:EPerson=> 42

CArtikelFlow

Info => 'Bitte tragen...'

CArtikelFlow::CreateSub

Flow

parent:EArtikel => 485

owner:EPerson=> 42

CArtikelFlow

Info => 'Bitte tragen...'

CArtikelFlow::CreateSub

Flow

parent:EArtikel => 485

owner:EPerson=> 42

CArtikelFlow

Info => 'Bitte tragen...'

CArtikelFlow::CreateSub

Mittwoch, 13. Februar 13

Page 39: Alles in die Session, nichts im Browser!

ZUM THEMA SICHERHEIT...

Mittwoch, 13. Februar 13

Page 40: Alles in die Session, nichts im Browser!

https://www.bsi.bund.de/cae/servlet/contentblob/476464/publicationFile/30632/WebSec_pdf

108Seiten

Mittwoch, 13. Februar 13

Page 42: Alles in die Session, nichts im Browser!

FRAGEN / ANREGUNGEN / KRITIK

Mittwoch, 13. Februar 13