Die Flexperten Herrlich & Ramuschkat

Wichtige Änderung der FileReference API in Flash Player 10

Im gerade veröffentlichten Flash Player 10 gibt es eine kleine aber wichtige Änderung bei der FileReference Klasse.

In Flash Player 10 wird ein FileReference.browse() Dialog nur noch dann geöffnet, wenn der Aufruf der Funktion aus einer unmittelbaren Benutzeraktion hervorgeht.

Hintergrund ist ein Sicherheitsproblem: wenn man sich auf einer HTML Seite befindet, in der zwei SWFs eingebunden sind und eines der SWFs ein FileReference.browse() aufruft, dann kann man als Benutzer nicht wissen, welches SWF diesen Aufruf getätigt hat und lädt die aktuellen und topgeheimen Quartalszahlen evtl. auf einen falschen Server… sprich: ein aus dem Flash Player initiierter Up-/download ist dann nicht transparent einer SWF zu zu ordnen.

In Flash Player 10 kann man FileReference.browse() also nur aus einen Eventhandler heraus öffnen, der einem Benutzerevent zugeordnet ist, also klassischerweise MouseEvent.CLICK. Nur dann geht es. Ein irgendwo im Code ausgerufenes FileReference.browse() wird ignoriert!

Damit lehnt sich der Flash Player 10 den aus HTML schon bekannten Sicherheitsmodell an (was gut ist), gleichzeitig kann es aber bedeuten, dass bestehenden Anwendungen nicht mehr funktionieren (was nicht so gut ist)

Problematisch ist das z.B. in folgendem typischen Szenario (läuft in FP9, nicht aber in FP10):

  1. Benutzer klickt auf einen Button, um ein Dokument von einem Server anzufordern (z.B. ein PDF)
  2. zuerst werden per RemoteObject oder HTTPService komplexe Daten an den Server geschickt um das Dokument zu generieren
  3. nach erfolgtem RemoteObject Aufruf und Erhalt des ResultEvents wird FileReference.browse() aus dem Result-Handler aus aufgerufen
  4. danach dann entsprechend ein Download eingeleitet

Das klappt in Flash Player 9, aber nicht in FP10, da in 3) das FileReference.browse() nicht im Kontext einer Benutzeraktion steht!

In diesem Fall müsste man nach 3) einen Dialog oder ähnlich anzeigen, auf den der Benutzer explizit klicken muss, um den Download zu starten oder aber die Daten als HTTP-POST Daten bei Aufruf der FileReference.download Methode direkt übergeben.

Mehr dazu hier:
http://theflashblog.com/?p=423
http://www.bit-101.com/blog/?p=1382
http://theflashblog.com/?p=463
http://www.adobe.com/devnet

Ürbigens gibt es weitere, teilweise subtile Änderungen in den Netzwerk APIs, mehr dazu in dem DevNet Artikel (s.o.)

Gruß,
Dirk.

No comments yet

Einen Kommentar schreiben