Inläsning av data

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Flash Player- och AIR-innehåll kan utbyta data med en server. Inläsning av data är en annan typ av åtgärd än inläsning av medier, eftersom den inlästa informationen visas som programobjekt i stället för att visas som media. Vanligtvis kan innehåll läsa in data från samma domän som innehållet kom från. Däremot krävs det vanligtvis principfiler om innehållet ska kunna läsa in data från andra domäner (se Webbplatsinställningar (principfiler) ).

Obs! Innehåll som körs i AIR-programmets sandlåda serveras aldrig från en fjärrdomän (om inte utvecklaren avsiktligen importerar fjärrinnehåll till programmets sandlåda), och det kan därför inte delta i de typer av attacker som principfiler skyddar mot. AIR-innehåll i programsandlådan är inte begränsat från att läsa in data genom principfiler. Med AIR-innehåll i andra sandlådor har de begränsningar som beskrivs här.

Använda URLLoader och URLStream

Du kan läsa in data som till exempel en XML-fil eller textfil. Metoderna load() för klasserna URLLoader och URLStream styrs av behörigheter i URL-principfiler.

Om du använder metoden load() för att läsa in innehåll från en annan domän än den med koden som anropar metoden, söker körningen efter en URL-principfil på servern med de inlästa resurserna. Om det finns en principfil som ger åtkomst till domänen för det innehåll som ska läsas in kan du läsa in dessa data.

Ansluta till socketar

Körningen söker som standard efter en socketprincipfil som hanteras från port 843. Liksom med URL-principfiler kallas den här filen för huvudprincipfil .

När principfiler först började användas i Flash Player 6 fanns det inget stöd för socketprincipfiler. Anslutningar till socketservrar fick behörighet genom en principfil i standardplatsen på en HTTP-server på port 80 för samma värddator som socketservern. Flash Player 9 stöder fortfarande den här funktionen men Flash Player 10 gör det inte. I Flash Player 10 kan bara socketprincipfiler auktorisera socketanslutningar.

Precis som URL-principfiler stöder socketprincipfiler en metaprincipprogramsats, som anger vilka portar som kan hantera principfiler. I stället för att vara en ”master-only” är standardmetaprincipen för socketprincipen ”all”. Såvida inte huvudprincipfilen anger en mer restriktiv inställning förutsätter Flash Player att valfri socket på värden kan hantera en socketprincipfil.

Åtkomsten till socket- och XML-socketanslutningar inaktiveras som standard, även om den socket som du ansluter till finns i samma domän som SWF-filen. Du kan tillåta åtkomst på socketnivå genom att hantera en socketprincipfil från någon av följande platser:

  • Port 843 (huvudprincipfilens placering)

  • Samma port som huvudsocketanslutningen

  • En annan port än huvudsocketanslutningen

Flash Player söker som standard efter en socketprincipfil på port 843 och på samma port som huvudsocketanslutningen. Om du vill hantera en socketprincipfil från en annan port måste SWF-filen anropa Security.loadPolicyFile() .

En socketprincipfil har samma syntax som en URL-principfil, förutom att den också måste ange vilka portar som ska vara öppna. När en socketprincipfil hanteras från en port med ett lägre nummer än 1024 kan den ge åtkomst till alla portar. När en principfil kommer från port 1024 eller högre kan den bara ge åtkomst till port 1024 och högre. De tillåtna portarna anges i ett to-ports -attribut i taggen <allow-access-from> . Enstaka portnummer, portintervall och jokertecken får användas.

Följande är ett exempel på en socketprincipfil:

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 
<!-- Policy file for xmlsocket://socks.mysite.com --> 
<cross-domain-policy>  
    <allow-access-from domain="*" to-ports="507" />  
    <allow-access-from domain="*.example.com" to-ports="507,516" />  
    <allow-access-from domain="*.example.org" to-ports="516-523" />  
    <allow-access-from domain="adobe.com" to-ports="507,516-523" />  
    <allow-access-from domain="192.0.34.166" to-ports="*" />  
</cross-domain-policy> 

Om du vill hämta en socketprincipfil från port 843 eller från samma port som huvudsocketanslutningen anropar du metoden Socket.connect() eller XMLSocket.connect() . Flash Player söker först efter en huvudprincipfil på port 843. Om det finns någon där, kontrollerar programmet om filen innehåller en metaprincipprogramsats som förbjuder socketprincipfiler på målporten. Om åtkomsten inte förbjuds söker Flash Player först efter en lämplig allow-access-from -sats i huvudprincipfilen. Om det inte finns någon, söker programmet efter en socketprincipfil på samma port som huvudsocketanslutningen.

Om du vill hämta en socketprincipfil på en annan plats anropar du först metoden Security.loadPolicyFile() med den speciella "xmlsocket" -syntaxen, så här:

Security.loadPolicyFile("xmlsocket://server.com:2525"); 

Anropa metoden Security.loadPolicyFile() innan anrop av metoden Socket.connect() eller XMLSocket.connect() görs. Därefter väntar Flash Player tills principfilens begäran är slutförd innan programmet avgör om huvudanslutningen tillåts. Om huvudprincipfilen anger att målplatsen kan hantera principfiler, har anropet till loadPolicyFile() ingen effekt, även om det finns en principfil på den platsen.

Om du implementerar en socketserver och du behöver använda en socketprincip, måste du bestämma om du ska använda principfilen via samma port som tillåter huvudanslutningar eller en annan port. I båda fallen måste servern vänta på den första överföringen från klienten innan ett svar skickas.

Om Flash Player begär en principfil skickas alltid följande sträng så snart anslutningen är upprättad:

<policy-file-request/>

När servern tar emot den här strängen kan principfilen skickas. Förfrågningen från Flash Player avslutas alltid med en null-byte, och svaret från servern måste också avslutas med en null-byte.

Du kan inte återanvända samma anslutning för både en principfilsbegäran och en huvudanslutning. Stäng anslutningen när principfilen har skickats. Om du inte gör det avslutas principfilsanslutningen av Flash Player innan huvudanslutningen upprättas.

Skydda data

För att skydda data när de skickas över Internet kan du använda TLS (Transport Layer Security) eller SSL (Secure Sockets Layer) på den server varifrån informationen kommer. Sedan kan du ansluta till servern med HTTPS-protokollet.

I program som skapats för AIR 2 eller senare versioner kan du även skydda TCP-socketkommunikation. Med klassen SecureSocket kan du initiera en socketanslutning till en socketserver som använder TLS version 1 eller SSL version 4.

Datasändning

Data skickas när koden skickar dessa till en server eller en resurs. Det är alltid tillåtet att skicka data för innehåll från en nätverksdomän. En lokal SWF-fil kan endast skicka data till nätverksadresser om den ligger i sandlådan lokal-tillförlitlig eller lokal-med-nätverk, eller i AIR-programsandlådan. Mer information finns i Lokala sandlådor .

Du kan använda funktionen flash.net.sendToURL() för att skicka data till en URL-adress. Det finns andra metoder som också skickar begäran till URL-adresser. Det är inläsningsmetoder, t.ex. Loader.load() och Sound.load() , och datainläsningsmetoder, t.ex. URLLoader.load() och URLStream.load() .

Överföra och ladda ned filer

Metoden FileReference.upload() startar överföringen av en fil som angetts av en användare till en extern server. Innan du anropar metoden FileReference.upload() måste du anropa metoden FileReference.browse() eller FileReferenceList.browse() .

Koden som initierar metoden FileReference.browse() eller FileReferenceList.browse() kan bara anropas som svar på en mushändelse eller en tangentbordshändelse. Om koden anropas i andra situationer genereras ett undantag i Flash Player 10 och senare. Men en användarinitierad händelse krävs inte för att anropa dessa metoder från AIR-programsandlådan.

Anrop av metoden FileReference.download() öppnar en dialogruta där användaren kan ladda ned en fil från en extern server.

Obs! Om servern kräver användarverifiering kan bara SWF-filer som körs i en webbläsare (d.v.s. med webbläsarplugin eller ActiveX-kontroll) öppna en dialogruta där användaren kan ange användarnamn och lösenord för verifiering, och bara för nedladdning. Inga överföringar kan göras till en server som kräver användarverifiering.

Överföring är inte tillåtet om den anropande SWF-filen körs i sandlådan lokal-med-filsystem.

Som standard kan en SWF-fil inte initiera en överföring till, eller nedladdning från, någon annan server än den egna. En SWF-fil kan överföra till, eller ladda ned från, en annan server om den har en principfil som ger behörighet till SWF-filens domän.