Gegevens laden

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Inhoud in Flash Player en AIR kan gegevens uitwisselen met servers. Het laden van gegevens is een ander type bewerking dan het laden van media. De reden hiervoor is dat de geladen gegevens als programmaobjecten en niet als media worden weergegeven. Over het algemeen kunnen gegevens door inhoud worden geladen als de gegevens uit het domein komen waarin de inhoud oorspronkelijk is gemaakt. Gewoonlijk vereist inhoud echter beleidsbestanden om gegevens uit andere domeinen te laden (zie Controlemiddelen voor websites (beleidsbestanden) ).

Opmerking: Inhoud die wordt uitgevoerd in de AIR-toepassingssandbox wordt nooit aangeboden vanaf een extern domein (tenzij de ontwikkelaar doelbewust externe inhoud importeert in de toepassingssandbox). Daarom kan deze inhoud ook niet deelnemen aan de typen aanvallen waartegen beleidsbestanden beveiligen. AIR-inhoud in de toepassingssandbox wordt niet ingeperkt door de beleidsbestanden bij het laden van gegevens. AIR-inhoud in andere sandboxen is echter wel onderhevig aan de beperkingen die hier worden beschreven.

URLLoader en URLStream gebruiken

U kunt gegevens laden, zoals een XML-bestand of een tekstbestand. Het aanroepen van de methode load() van de klassen URLLoader en URLStream is afhankelijk van bevoegdheden die zijn vastgelegd in een bestand met interdomeinbeleid.

Als u de methode load() gebruikt om inhoud te laden uit een ander domein dan het domein van de code waarmee de methode wordt aangeroepen, controleert de runtime of er op de server van de geladen elementen een URL-beleidsbestand aanwezig is. Als dat het geval is en het beleid toegang biedt tot het domein van de inhoud die wordt geladen, kunt u de gegevens laden.

Verbinding maken met sockets

Standaard zoekt de runtime een socketbeleidsbestand dat wordt aangeleverd vanaf poort 843. Net als bij URL-beleidsbestanden wordt dit bestand het hoofdbeleidsbestand genoemd.

Toen beleidsbestanden voor het eerst in Flash Player 6 werden geïntroduceerd, was er geen ondersteuning voor socketbeleidsbestanden. Verbindingen met socketservers werden toegestaan door een beleidsbestand op de standaardlocatie op een HTTP-server via poort 80 van dezelfde host als de socketserver. Flash Player 9 ondersteunt deze functie nog wel, Flash Player 10 niet. In Flash Player 10 kunnen socketverbindingen alleen door socketbeleidsbestanden worden geautoriseerd.

Socketbeleidsbestanden ondersteunen, net als URL-beleidsbestanden, een metabeleidsinstructie waarin staat welke poorten beleidsbestanden kunnen leveren. In plaats van "master-only" is het standaardmetabeleid voor socketbeleidsbestanden "all". Dat wil zeggen, dat tenzij het hoofdbeleidsbestand een striktere instelling opgeeft, Flash Player ervan uitgaat dat elke socket op de host een socketbeleidsbestand kan aanleveren.

Toegang tot socket- en XML-socketverbindingen is standaard uitgeschakeld, zelfs als de socket waarmee u verbinding maakt in hetzelfde domein is als het SWF-bestand. U kunt toegang op socketniveau toestaan door een socketbeleidsbestand aan te leveren uit een van de volgende locaties:

  • Poort 843 (de locatie van het hoofdbeleidsbestand)

  • De poort van de hoofdsocketverbinding

  • Een andere poort dan de hoofdsocketverbinding

Standaard zoekt Flash Player naar een socketbeleidsbestand op poort 843 en op dezelfde poort als de hoofdsocketverbinding. Als u een socketbeleidsbestand van een andere poort wilt aanleveren, moet het SWF-bestand Security.loadPolicyFile() aanroepen.

Een socketbeleidsbestand heeft dezelfde syntaxis als een URL-beleidsbestand, maar moet ook opgeven aan welke poorten toegang wordt toegewezen. Wanneer een beleidsbestand van een poortnummer lager dan 1024 afkomstig is, kan het beleidsbestand toegang verlenen tot alle andere poorten. Wanneer een beleidsbestand van poort 1024 of hoger afkomstig is, kan het beleidsbestand alleen toegang verlenen tot de poorten 1024 en hoger. De toegestane poorten worden in het attribuut to-ports in de tag <allow-access-from> opgegeven. Afzonderlijke poortnummers, poortbereiken en jokertekens zijn toegestane waarden.

Dit is een voorbeeld van een socketbeleidsbestand:

<?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> 

Als u een socketbeleidsbestand van poort 843 wilt ophalen of van dezelfde poort als een hoofdsocketverbinding, roept u de methode Socket.connect() of XMLSocket.connect() aan. Flash Player controleert eerst of er een hoofdbeleidsbestand aanwezig is op poort 843. Als het er een vindt, wordt gecontroleerd of het bestand een metabeleidsinstructie bevat die socketbeleidsbestanden op de doelpoort verbiedt. Als toegang niet verboden is, zoekt Flash Player eerst naar de juiste instructie allow-access-from in het hoofdbeleidsbestand. Als er geen wordt gevonden, zoekt het naar een socketbeleidsbestand op dezelfde poort als de hoofdsocketverbinding.

Als u een socketbeleidsbestand van een andere locatie wilt ophalen, roept u eerst de methode Security.loadPolicyFile() aan met de speciale "xmlsocket" -syntaxis, als in het volgende voorbeeld:

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

Roep eerst de methode Security.loadPolicyFile() aan en vervolgens de methode Socket.connect() of XMLSocket.connect() . Flash Player wacht tot het verzoek om het beleidsbestand is afgehandeld, waarna wordt vastgesteld of de hoofdverbinding al dan niet mag worden gebruikt. Als het hoofdbeleidsbestand echter aangeeft dat de doellocatie geen beleidsbestanden mag aanleveren, heeft de aanroep naar loadPolicyFile() geen effect, zelfs als er op die locatie een beleidsbestand aanwezig is.

Als u bezig bent met de implementatie van een socketserver en u een bestand met socketbeleid beschikbaar wilt stellen, is het belangrijk te bepalen of u het bestand wilt aanbieden via de poort voor hoofdverbindingen of via een andere poort. In beide gevallen moet de server wachten op de eerste transmissie van de client voordat u een reactie verzendt.

Als Flash Player een beleidsbestand aanvraagt, wordt na het tot stand brengen van de verbinding altijd de volgende tekenreeks verzonden:

<policy-file-request/>

Op het moment dat de server deze tekenreeks ontvangt, kan het bestand worden verzonden. Het verzoek van Flash Player wordt altijd afgesloten met een null-byte en de reactie van de server moet ook worden afgesloten met een null-byte.

Het is niet mogelijk dezelfde verbinding te gebruiken voor het aanvragen van een beleidsbestand en als hoofdverbinding. U moet de verbinding sluiten nadat het beleidsbestand is verzonden. Als u dat niet doet, sluit Flash Player de verbinding voor de aanvraag voordat de hoofdverbinding tot stand wordt gebracht.

Gegevens beveiligen

Als u gegevens wilt beveiligen, zodat deze niet kunnen worden afgeluisterd of gewijzigd wanneer ze via internet worden verzonden, kunt u TLS (Transport Layer Security) of SSL (Socket Layer Security) toepassen op de server waar de gegevens oorspronkelijk vandaan komen. Vervolgens kunt u verbinding maken met de server via het HTTPS-protocol.

Bij toepassingen die zijn gemaakt voor AIR 2 of hoger, kunt u ook de communicatie via de TCP-socket beveiligen. Met de klasse SecureSocket kunt u een socketverbinding maken met een socketserver die gebruikmaakt van TLS versie 1 of SSL versie 4.

Gegevens verzenden

Gegevensverzending treedt op wanneer de code gegevens stuurt naar een server of resource. Gegevens kunnen altijd worden verzonden als het gaat om inhoud van een netwerkdomein. Een lokaal SWF-bestand kan alleen gegevens verzenden naar netwerkadressen als het bestand deel uitmaakt van de sandbox Lokaal-vertrouwd, Lokaal-met-netwerk of AIR-toepassing. Zie Lokale sandboxen voor meer informatie.

Gebruik de functie flash.net.sendToURL() om gegevens te verzenden naar een URL. Er zijn ook diverse methoden die aanvragen verzenden naar URL’s. Voorbeelden hiervan zijn laadmethoden, zoals Loader.load() en Sound.load() , en methoden voor het laden van gegevens, zoals URLLoader.load() en URLStream.load() .

bestanden uploaden en downloaden

Met de methode FileReference.upload() wordt het uploaden naar een externe server gestart van een bestand dat is geselecteerd door een gebruiker. U moet de methode FileReference.browse() of FileReferenceList.browse() aanroepen voordat u de methode FileReference.upload() aanroept.

De code die de methode FileReference.browse() of FileReferenceList.browse() initieert, kan alleen worden opgeroepen als reactie op een muis- of toetsenbordgebeurtenis. Als deze code in andere situaties wordt opgeroepen, wordt in Flash Player 10 en hoger een uitzonderingsfout gegenereerd. Voor het aanroepen van deze methoden van de AIR-toepassingssandbox is echter geen gebeurtenis vereist die door de gebruiker wordt geïnitieerd.

Het aanroepen van de methode FileReference.download() zorgt ervoor dat er een dialoogvenster wordt geopend waarmee de gebruiker een bestand kan downloaden van een externe server.

Opmerking: Als op de server verificatie van gebruikers is vereist, kunnen alleen SWF-bestanden die in een browser worden uitgevoerd, met andere woorden, die de browserinsteekmodule of het ActiveX-besturingselement gebruiken, een dialoogvenster weergeven waarin de gebruiker wordt gevraagd een gebruikersnaam en wachtwoord ter verificatie op te geven (alleen voor downloads). Flash Player biedt geen ondersteuning voor uploads naar een server die gebruikersverificatie vereist.

Uploads en downloads zijn niet toegestaan wanneer het aanroepende SWF-bestand zich in de sandbox Lokaal-met-bestandssysteem bevindt.

De standaardinstelling is dat een SWF-bestand alleen uploads en downloads kan starten naar en van de eigen server. Een SWF-bestand kan alleen gegevens uploaden naar of downloaden van een andere server als op die server een beleidsbestand beschikbaar is dat toegang biedt tot het domein van het initiërende SWF-bestand.