Stellt euch vor ihr habt eine Webseite, schafverleih.de, über die ihr… Schafe verleiht. Die Webseite funktioniert so, dass ihr einen Rechner habt, in dem der geneigte Kunde zunächst seine Rasenfläche auswählen kann. Mit einem Klick auf “Bestellen” gelangt er dann in den Bestellprozess. Die Datenübertragung vom Rasenflächen-Rechner zur Bestellstrecke läuft, aus Gründen, nicht über einen Formular-POST, oder sowas, sondern indem die Eingaben im Local Storage / Session Storage des Browsers zwischengespeichert werden. Funktioniert super!

Nun bekommt ihr einen Geschäftspartner, schafe-ostfriesland.de, der eure Schafe auf seiner Seite einbinden will. Gut, dass euer Rasenflächenrechner auch als IFrame eingebunden funktioniert. Der Kunde wählt seine Fläche, klickt auf “Weiter”, ein neuer Tab mit dem Bestellprozess öffnet sich. Funktioniert super! Bei euch.

Nun testet euer Geschäftspartner die Integration und ihr bekommt den Bug-Report, dass die Daten aus dem Rechner nicht in den Bestellprozess übernommen werden. Er benutzt natürlich den Internet Explorer 11.

Solche Bugs sind ja nun nicht gerade selten. IE11 macht oft Probleme und so macht ihr euch auf die Fehlersuche. Aber es ist unmöglich den Bug zu reproduzieren. In jeder IE 11-VM, die ihr findet, funktioniert es. Ihr kauft euch einen alten Gaming-PC, installiert dort ein altes Windows 7, das ihr noch aus Studienzeiten herumliegen habt und probiert es aus. Funktioniert wunderbar.

Eine TeamViewer-Session mit dem Geschäftspartner später seid ihr immer noch nicht schlauer. Immerhin habt ihr nun gesehen, dass es tatsächlich nicht funktioniert. Ihr entscheidet euch zum allerletzten mal zu googeln, probiert alle Suchbegriffe aus. Windows, IE 11, Local Storage, WHY DOES IT NOT WORK, I HATE FRONTEND PROGRAMMING.

Das Ende der Geschichte: Nach hundert nicht helfenden StackOverflow-Antworten und anderen komischen IE11 Bugs fand ich dann endlich diesen Bugreport bei Microsoft der genau das Problem beschreibt.

Offensichtlich gibt es bei Windows eine Möglichkeit “Vertrauenswürdige Seiten” anzulegen, die dann besonders behandelt werden. Unter anderem führt das dazu, dass der Local Storage woanders hingespeichert wird. Natürlich hatte der Kunde von schafe-ostfriesland.de (Anmerkung der Redaktion: Name geändert) eben diese Adresse als “Vertrauenswürdige Seite”, wahrscheinlich als Windows Group Policy auf alle Unternehmensrechner verteilt. An und für sich ist das ja auch nicht so schlimm.

Der Bug ist folgender: Bindet man nun auf der vertrauenswürdigen Seite einen Iframe ein, der auf eine andere (nicht vertrauenswürdige) Seite zeigt, guckt er, wenn diese andere Seiten den Local Storage benutzt, trotzdem in den Bereich, wo er eigentlich den Storage von der vertrauenswürdigen Seite packen würde. Heißt:

  • Man gibt im Rasenflächenrechner etwas ein, er speichert es in der “sicheren Zone”.
  • Man klickt auf Weiter, und wird auf schafverleih.de geleitet
  • Diese Seite meldet dann, dass sich nichts im Local Storage befindet, weil der Browser jetzt auf einer nicht-vertrauenswürdigen Seite ist und den anderen Local Storage-Speicherbereich verwendet.

Als ich das dann nach zwei Stunden und viel Fluchen herausgefunden hatte, war ich sehr froh. Ist jetzt zwar kein Bug, den ich fixen kann (außer wenn ich von Local Storage auf etwas anderes wechsele) — aber dafür betrifft er lediglich die sehr spezifische Zielgruppe von Leuten, die ausgerechnet “schafe-ostfriesland.de” in den vertrauenswürdigen Seiten haben, und wer, außer Kunden, die sowas per Group Policy drin haben, benutzen dieses obskure Windows-Feature?

(Hoffe ich zumindest)