[Flash] Ruzie met de security sandbox

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik was van de week gezellig aan het experimenteren met het inlezen van mysql data (via php) in flash. Momenteel heb ik pas 2 methodes uitgeprobeerd:

1. Via PHP een stuk Xml parsen, en dat dan inlezen in flash.
2. Doormiddel van Amfphp direct het resultaat van een query als array doorpasen naar flash.

Dit werkt allemaal prima, echter loop ik behoorlijk te klooien met de security sandbox van Flash.
Wat doe ik:

In het geval van amfphp, maak ik de verbinding tussen flash, en amfphp doormiddel van:
code:
1
2
3
4
// ----------------------  Maak een amf verbinding met Amfphp
            var gw:NetConnection = new NetConnection();
            gw.connect("http://127.0.0.1/amfphp/gateway.php");
            var res:Responder = new Responder(onResult, onFault);


Met het connect commando, geef ik nu dus de locatie van de gateway.php mee (uiteraard via het 'webadres', en niet via het filesystem (c:\blabla\gateway.php) zodat de php file ook daadwerkelijk geparsed wordt.

Dit werkt prima. Mits ik in mijn browser de swf file (of de html file die de swf embed bevat) ook maar de boel aanroep via http:// 127.0.0.1 (wanneer ik zelfs al http://localhost gebruik, begint de security sandbox van flash te miepen...)

Nu benader ik mijn thuisservertje van een andere computer hier in het netwerk, (bijvoorbeeld in de zin van: http:// 192.168.1.11/flashapp.html, krijg ik weer een security sandbox fout....

Logisch, want mijn flash applicatie wil verbinden naar http:// 127.0.0.1/amfphp/gateway.php
Dus zou je zeggen: verander deze regel naar http:// 192.168.1.11/amfphp/gateway.php en het probleem is opgelost...

Maar dit is niet de manier hoe ik wil dat mijn flash applicatie verbindt met de amfphp gateway...
Ik wil namelijk dat mijn flash applicatie gewoon via 127.0.0.1 verbindt met mijn amfphp gateway (net zoals php gewoon via localhost met een database verbindt.

(bijwerking is namelijk ook, dat als je je flash filetje verhuisd naar een andere server, je deze regel weer moet aanpassen in flash)

Nou zou een crossdomain.xml bestand hiervoor de oplossing zijn, maar wat blijkt.... Ik krijg dit totaal niet werkend.

Ik maak heb het volgende crossdomain.xml bestand in de root van mijn server gezet:
code:
1
2
3
4
5
<?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="*" />
</cross-domain-policy>

Maar helaas, zelfs met deze xml file krijg ik nog een security fout...

Tevens heb ik ook de boel via flash aan de gang proberen te krijgen doormiddel van het commando:
Security.allowDomain
Maar dat werkte helaas ook al niet....

Mijn vraag: Zie ik nu iets compleet over het hoofd? (moet ik nog tegen flash zeggen dat die crossdomain.xml bestaat?) Is het incorrect om via de localhost verbinding te maken met een php/xml/whatever file?

Alvast bedankt ;)

Dikke Edit:
Nu eens zo snugger geweest om het op de volgende manier te doen:
code:
1
gw.connect("/amfphp/gateway.php");


En, het werkt! woeh!.... Wel raar... want ik had verwacht dat mijn php file nou niet zou parsen.. maar dat doettie natuurlijk wel omdat deze eigenlijk via "http://servernaam/amfphp/gateway.php wordt aangeroepen...

[ Voor 5% gewijzigd door Verwijderd op 28-09-2009 14:55 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 10:22

MueR

Admin Tweakers Discord

is niet lief

Flash mag, net als javascript, niet op je lokale PC komen, tenzij ik me heel erg vergis. Je vergeet ook 1 klein en subtiel verschil. PHP is serverside, Flash clientside. PHP mag dus inherent veel meer en weet ook dat localhost altijd dezelfde machine is. Volgens mij is je security melding dus compleet terecht.

Oh, je crossdomain zoekt ie automagisch in de root van je domain; dus http://domain/crossdomain.xml

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 12:55
als je de policy file in de root van je domain zet geldt het wel meteen voor je hele domain.
Netter zou zijn als je het gewoon in de betreffende directory zet en dan in actiosncript load met de Security.loadPolicyFile("http://domain/somedir/crossdomain.xml");

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
MueR schreef op maandag 28 september 2009 @ 14:56:
Flash mag, net als javascript, niet op je lokale PC komen, tenzij ik me heel erg vergis. Je vergeet ook 1 klein en subtiel verschil. PHP is serverside, Flash clientside. PHP mag dus inherent veel meer en weet ook dat localhost altijd dezelfde machine is. Volgens mij is je security melding dus compleet terecht.

Oh, je crossdomain zoekt ie automagisch in de root van je domain; dus http://domain/crossdomain.xml
Bedankt voor je opmerking. Inderdaad was ik het punt even vergeten dat flash altijd clientside loopt... Waardoor inderdaad, de foutmelding ook gelijk logisch is.
(Nogal stom dat ik dit even vergeten was...)
Caelorum schreef op maandag 28 september 2009 @ 15:00:
als je de policy file in de root van je domain zet geldt het wel meteen voor je hele domain.
Netter zou zijn als je het gewoon in de betreffende directory zet en dan in actiosncript load met de Security.loadPolicyFile("http://domain/somedir/crossdomain.xml");
Dat is inderdaad een mooie oplossing, welke ik nog niet kende. Ik ga hier ook eens even mee rommelen. Thanks!