Patrick Schröder: Problem mit crossdomain.xml und Flash-Video-Player (JW)

Hallo allerseits,

ich nutze den Flashplayer von longtail-video (Jeroen Wijering) auf meinen Server (sub)domainübergreifend. Nun bin ich durch Zufall darauf gestoßen, dass die Sicherheitseinstellungen von Flash selbst auf einer Domain mit getrennten Subdomains Alarm schlagen und das Video nicht abspielbar ist.

Die Lösung schien zunächst nur eine crossdomain.xml zu sein, die im Webroot der Domain liegen muss, wo das Video liegt (allein das war schon ein Akt...)

Nun gibt der Player mehrere Fehler zurück, die eigentlich inzwischen nicht mehr auftauchen dürften, jedoch unterschiedlicher Natur, wenn die crossdomain.xml unterschiedlichen Inhalt enthält - trotzdem bisher irgendwie nicht logisch (subjektiv betrachtet).

Version des Players ist übrigens, die Aktuelleste, 5.1

die HTML- / PHP-Datei, liegt auf http://(www.)domain.xy/video.php

  
<div id="videobox" class="video"><a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</div>  
<script type="text/javascript">  
  var s1 = new SWFObject("http://data.domain.xy/flash/mediaplayer.swf","mediaplayer","360","308","7");  
  s1.addParam("allowfullscreen","true");  
  s1.addVariable("width","360");  
  s1.addVariable("height","308");  
  s1.addVariable("file", "/videos/afraid.wmv");  
  s1.addVariable("showdigits","true");  
  s1.addVariable("showstop","true");  
  s1.addVariable("backcolor","0x999999");  
  s1.addVariable("frontcolor","0xCCCCCC");  
  s1.write("videobox");  
</script>  

crossdomain.xml, Version 1 (oder auch gar nicht vorhanden - selbes Ergebnis)

  
<?xml version="1.0"?>  
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">  
<cross-domain-policy>  
  <allow-access-from domain="http://domain.xy" />  
  <allow-access-from domain="http://www.domain.xy" />  
</cross-domain-policy>  

oder
crossdomain.xml, Version 2

  
<?xml version="1.0"?>  
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">  
<cross-domain-policy>  
  <allow-access-from domain="domain.xy" />  
  <allow-access-from domain="www.domain.xy" />  
</cross-domain-policy>  

führt zu folgendem Problem:

  
Error #2044: error unverarbeitet. text=Task Queue failed at step 6: Playlist could not be loaded: Error #2048: Verletzung der Sicherheits-Sandbox: http://data.domain.xy/flash/mediaplayer.swf kann keine Daten von /videos/afraid.wmv laden.  
// Das Video ist dort defintiv vorhanden und die crossdomain.xml enthält auch die Domain, allerdings kommt auch dergleich Fehler, wenn die crossdomain.xml nicht vorhanden ist.  

crossdomain.xml, Version 3

  
<?xml version="1.0"?>  
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">  
<cross-domain-policy>  
  <allow-access-from domain="*.domain.xy" />  
</cross-domain-policy>  

führt zu folgendem Problem:

  
TypeError: Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich.  
	at com.longtailvideo.jwplayer.parsers::ParserFactory$/getParser()  
	at com.longtailvideo.jwplayer.model::Playlist/playlistLoaded()  
	at flash.events::EventDispatcher/dispatchEventFunction()  
	at flash.events::EventDispatcher/dispatchEvent()  
	at com.longtailvideo.jwplayer.utils::AssetLoader/urlLoadComplete()  
	at flash.events::EventDispatcher/dispatchEventFunction()  
	at flash.events::EventDispatcher/dispatchEvent()  
	at flash.net::URLLoader/onComplete()  

Das gleiche Problem tritt auch auf, wenn ich die mediaplayer.swf direkt auf die Domain lege und somit das cross-Domain-Problem gar nicht da ist.
Das würde zwar dafür sprechen, dass die xml-Datei mit
  <allow-access-from domain="*.domain.xy" />
am "richtigsten" ist (warum auch immer die anderen Versionen nicht funktionieren). Jedoch liest sich der Fehlertext für mich so, als würde er versuchen die crossdomain.xml als Playlist anzusehen...?

Habe ich den Aufbau des Problems nicht verstanden? Kennt jemand eine Eigenheit des Players, die zu den Problemen führt? Oder hat jemand eine Idee, wie das Problem behoben werden kann?

Gruß Patrick

  1. Hallo Patrick,

    laut Spezifikation (Seite 8, Listung 1.3.3) hat das Element <cross-domain-policy/> das Attribut secure. Dazu wird ausgeführt:

    secure: [HTTPS and Sockets only, optional] Specifies whether access is granted only to HTTPS
       documents from the specified origin (true) or to all documents from the specified origin (false).

    If secure is not specified in an HTTPS policy file, it defaults to true. Using false in an HTTPS
       allow-access-from-identity policy file is not recommended because this compromises the security
       offered by HTTPS; for example, allowing man-in-the-middle attacks to gain access to the HTTPS
       data protected by the policy file.

    In socket policy files, the default is false. It is only useful to specify secure=”true” when the
       socket server is accepting connections from the local host since local socket connections are
       generally not at risk of man-in-the-middle attacks that could alter the secure=”true”
       declaration.

    Sieht man in die überschaubar kleine DTD, wird Attribute secure mit "true" vordefiniert. So wie ich das jetzt verstehe, werden die mit <cross-domain-policy/> angegebenden Domains nur akzeptiert, wenn sie über ein verschlüsseltes Protokoll verfügen. Es wäre also möglich mal mit <cross-domain-policy secure="false"/> zu probieren.

    Aber ansonsten kann ich Dir neben dem Rat, die Spezifikation sorgfältig zu studieren, auch nichts weiter schlaues schreiben.

    Gruß aus Berlin!
    eddi