Sven Rautenberg: (FLASH) Cross-Site-Scripting-Beschränkung bekannt?

Moin!

Ich stolpere gerade über ein kleines Problem mit Flash.

Folgendes Setup: Eine komplett in Flash erstellte Site (für die ich nicht verantwortlich bin :) ) enthält ein Kontaktformular, welches per Formmailer verschickt werden soll. Für den Formmailer bin ich verantwortlich, und dieses PHP-Skript (welches im Zusammenspiel mit HTML-Formularen toll funktioniert) muß leider aufgrund von Serverbeschränkungen auf einer anderen Domain liegen.

Also: Flashfilm von Domain A sendet per POST Daten an Domain B. So jedenfalls der Plan. Denn leider geht da nichts. Es kommt kein POST-Request an.

Meine Frage: Sind Cross-Site-Scripting-Beschränkungen bei Flash aktiv? Gibt es einen nachvollziehbaren technischen Grund für das Versagen, ist sowas irgendwem bekannt?

Google hat leider keine hilfreichen Hinweise offenbart.

- Sven Rautenberg

--
"Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
  1. Meine Frage: Sind Cross-Site-Scripting-Beschränkungen bei Flash aktiv? Gibt es einen nachvollziehbaren technischen Grund für das Versagen, ist sowas irgendwem bekannt?

    Standardmäßig wird in Flash Player 7 und späteren Versionen verhindert, dass eine von einer Domäne geladene SWF-Datei Zugriff auf Daten, Objekte oder Variablen aus SWF-Dateien erhält, die von anderen Domänen geladenen wurden. Es ist wechselseitig kein Zugriff auf die Objekte und Variablen möglich. Inhalte, die mit Hilfe nicht sicherer (nicht-HTTPS-) Protokolle geladen werden, können nicht auf Inhalte zugreifen, die mit einem sicheren (HTTPS-) Protokoll geladen werden, selbst wenn sich die Inhalte in derselben Domäne befinden. Eine SWF-Datei unter http://www.macromedia.com/main.swf kann beispielsweise keine Daten aus https://www.macromedia.com/data.txt laden. Genauso wenig kann eine in einer Domäne bereitgestellte SWF-Datei (z. B. mit loadVariables()) Daten einer anderen Domäne laden.

    Identische numerische IP-Adressen sind kompatibel. Ein Domänenname ist jedoch auch dann nicht mit einer IP-Adresse kompatibel, wenn der Domänenname dieselbe IP-Adresse besitzt.

    1. Moin!

      Genauso wenig kann eine in einer Domäne bereitgestellte SWF-Datei (z. B. mit loadVariables()) Daten einer anderen Domäne laden.

      ...und da man POST-Requests üblicherweise mit loadVariables() erledigt (wovon ich mich in einigen Flashforen überzeugen konnte), bleibt der Request auf die Fremddomain dann eben einfach aus.

      Hm, dann habe ich doch nicht so falsch gelegen mit meiner Vermutung.

      Kannst du bestätigen, dass es mit Flash 6 oder früheren Versionen noch funktioniert? Weil das erklären würde, warum die Ersteller der Flash-Site in der Annahme, es würde gehen, glückseelig in ihr Unglück gerannt sind. :)

      - Sven Rautenberg

      --
      "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
      1. Kannst du bestätigen, dass es mit Flash 6 oder früheren Versionen noch funktioniert?

        Nicht einwandfrei. Schau: http://www.macromedia.com/software/flashplayer/security/faq.html

        1. Moin!

          Kannst du bestätigen, dass es mit Flash 6 oder früheren Versionen noch funktioniert?

          Nicht einwandfrei. Schau: http://www.macromedia.com/software/flashplayer/security/faq.html

          Guter Link. Führt über wenige Stationen zu http://www.macromedia.com/support/flash/ts/documents/loadvars_security.htm#policy. Kurzzusammenfassung: Man kann mit einer eigenen Datei crossdomain.xml im Hauptverzeichnis der (für den Flashfilm fremden) Domain definieren, von wo aus Zugriffe für Flash erlaubt werden.

          Und noch ein paar Suchmaschinen-Stichwörter: Flash MX Flash 7 Cross-Site Scripting Cross-Domain loadvariables geturl POST GET kein Zugriff verweigert

          - Sven Rautenberg

          --
          "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
          1. Guter Link. Führt über wenige Stationen zu http://www.macromedia.com/support/flash/ts/documents/loadvars_security.htm#policy. Kurzzusammenfassung: Man kann mit einer eigenen Datei crossdomain.xml im Hauptverzeichnis der (für den Flashfilm fremden) Domain definieren, von wo aus Zugriffe für Flash erlaubt werden.

            Ja. Das putzige dabei ist: es führt das Sicherheitskonzept ad absurdum, weil der Entwickler entscheidet, ob Inhalte Cross-Domain ausgetauscht werden, und nicht der Client.

            1. Moin!

              Guter Link. Führt über wenige Stationen zu http://www.macromedia.com/support/flash/ts/documents/loadvars_security.htm#policy. Kurzzusammenfassung: Man kann mit einer eigenen Datei crossdomain.xml im Hauptverzeichnis der (für den Flashfilm fremden) Domain definieren, von wo aus Zugriffe für Flash erlaubt werden.

              Ja. Das putzige dabei ist: es führt das Sicherheitskonzept ad absurdum, weil der Entwickler entscheidet, ob Inhalte Cross-Domain ausgetauscht werden, und nicht der Client.

              Naja, so halb. Der Entwickler muß hierbei ja einerseits Gewalt über das Flash-File haben, und andererseits über die Domain.

              Würde ich als Besitzer der bösen fremden Angriffsdomain ebendiese für alle Welt freischalten, müßte ich immer noch darauf warten, dass mich ein Flashfilm kontaktiert - den ich dazu geschrieben haben muß, und den jemand ahnungslos auf seine Seite setzt.

              Wobei letzteres tatsächlich nicht unbedingt so unwahrscheinlich ist. Flash gilt ja eigentlich eher als "kompaktes animiertes Vektor-Bildformat", also kurz als "Bild". Und Bilder sind nicht böse. Dass ein Flash-Bild allerdings die gesamte Mächtigkeit von ActionScript hat, und auch problemlos Javascript aufrufen kann, welches im Site-Kontext der Seite läuft, die das Flash eingebunden hat, wird wenig bedacht. Auf diese Weise kann man sehr simpel alle Daten, die der Benutzer mit der anderen Domain so aushandelt (Cookies, Formulareingaben, etc.) abhören und zur Angriffsdomain weiterleiten. Mit Javascript würde sowas nicht möglich sein.

              Merke also: Binde nie fremde, unbekannte Flash-Animationen in die eigene Seite ein.

              Insgesamt ist diese ganze Aktion wieder mal ein Paradebeispiel dafür, warum Flash Müll ist (ich verwende das bekannte Wort für Feststoffexkrement mal nicht).

              - Sven Rautenberg

              --
              "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
              1. Merke also: Binde nie fremde, unbekannte Flash-Animationen in die eigene Seite ein.

                Oder sei selbst bösartig.