SessionIDs werden häufig nach einem Login verwendet, um einen User nach erfolgreichem Login zu tracken. Prominentes Beispiel: Online Banking. Da SessionIDs technisch gesehen nur ein shared Secret sind, muss man es sehr gut schützen. In den OWASP Top10 sind Probleme, wie z.B. Session Fixation und alle möglichen Arten von *SiteScripting als relevante Angriffe genannt. Inzwischen scheint nur eine eine Lösung für das SessionID Problem zu bestehen: Keine SessionIDs verwenden

In der Öffentlichkeit fast unbemerkt hat W3 das WebCryptoAPI entwickelt. Alle aktuellen Browser (dazu zählt der Internet Explorer 11 nicht) unterstützen das inzwischen.

Was kann man damit machen?

Das WebCryptoAPI kann mit der JavaScript Library PKI.js X.509 Zertifikate verwalten, d.h.

  1. Schlüsselpaar erzeugen
  2. Zertifikat von einer Registrierungsstelle mit PKCS#10 anfordern
  3. Beliebige Daten signieren, also auch JSON Daten

Dank CORS kann man damit auch signierte Nachrichten an beliebige Websites schicken, sofern diese das über CORS Parameter  Access-Control-Allow-Origin und Access-Control-Allow-Methods erlauben. Zwischen den Sites Login-Server und Application-Server ist kein weiterer Datenaustausch notwendig.

Source Code

Der Source Code ist auf Github unter https://gitlab.com/ip6li/x509sessions zu finden.