Een groot deel van het beveiligingsmodel dat door de runtimes van Flash Player en AIR wordt gebruikt, is gebaseerd op het domein waaruit geladen SWF-bestanden, HTML, media en andere elementen afkomstig zijn. Uitvoerbare code in een bestand uit een specifiek internetdomein, zoals www.example.com, heeft altijd toegang tot alle gegevens van dat domein. Deze elementen worden in dezelfde beveiligingsgroep geplaatst, die een
beveiligingssandbox
wordt genoemd. (Zie
Beveiligingssandboxen
voor meer informatie.)
ActionScript-code in een SWF-bestand kan bijvoorbeeld SWF-bestanden, bitmaps, audio, tekstbestanden en andere elementen uit het eigen domein laden. Ook is cross-scripting tussen twee SWF-bestanden uit hetzelfde domein altijd toegestaan, mits beide bestanden met ActionScript 3.0 zijn geschreven.
Cross-scripting
is het vermogen van code in het ene bestand om toegang te krijgen tot de eigenschappen, methoden en objecten die door de code in het andere bestand worden gedefinieerd.
Cross-scripting wordt niet ondersteund tussen SWF-bestanden die met ActionScript 3.0 of lager zijn geschreven. Deze bestanden kunnen echter communiceren door middel van de klasse LocalConnection. Verder is het standaard verboden om een SWF-bestand cross-scripting te laten voeren in ActionScript 3.0 SWF-bestanden uit andere domeinen en gegevens uit andere domeinen te laden. Dit soort toegang kan echter wel worden toegestaan met een aanroep van de methode
Security.allowDomain()
in het geladen SWF-bestand. Zie
Cross-scripting
voor meer informatie.
De volgende basisregels voor beveiliging zijn standaard van toepassing:
De runtimes van Flash Player en AIR beschouwen de volgende vermeldingen als individuele domeinen en hebben voor deze domeinen afzonderlijke beveiligingssandboxen ingesteld:
-
http://example.com
-
http://www.example.com
-
http://store.example.com
-
https://www.example.com
-
http://192.0.34.166
Zelfs als een benoemd domein, zoals http://example.com, aan een specifiek IP-adres wordt toegewezen, zoals http://192.0.34.166, stellen de runtimes voor beide afzonderlijke beveiligingssandboxen in.
Een ontwikkelaar kan twee basismethoden gebruiken om ervoor te zorgen dat een SWF-bestand toegang heeft tot elementen van andere sandboxen dan die van het SWF-bestand:
In het beveiligingsmodel van de Flash Player- en AIR-runtimes wordt onderscheid gemaakt tussen het laden van inhoud en het extraheren of ophalen van gegevens.
Inhoud
wordt als media gedefinieerd, zoals visuele media die de runtime kan weergeven, audio, video of een SWF- of HTML-bestand dat weergegeven media bevat.
Gegevens
worden gedefinieerd als iets dat alleen door code toegankelijk is. Inhoud en gegevens worden op verschillende manieren geladen.
-
Inhoud laden - U kunt inhoud laden aan de hand van klassen als Loader, Sound en Netstream, aan de hand van MXML-tags als u Flex gebruikt en aan de hand van HTML-tags als u een AIR-toepassing gebruikt.
-
Gegevens extraheren: u kunt gegevens uit geladen media extraheren met Bitmap-objecten, de methode
BitmapData.draw()
en
BitmapData.drawWithQuality()
, de eigenschap
Sound.id3
of de methode
SoundMixer.computeSpectrum()
. De methode
drawWithQuality
is beschikbaar in Flash Player 11.3 en hoger en in AIR 3.3 en hoger.
-
Toegang krijgen tot gegevens - U kunt rechtstreeks toegang krijgen tot gegevens door deze uit een extern bestand te laden (zoals een XML-bestand) met klassen als URLStream, URLLoader, FileReference, Socket en XMLSocket. AIR biedt extra klassen voor het laden van gegevens, bijvoorbeeld de klasse FileStream en de klasse XMLHttpRequest.
Het Flash Player-beveiligingsmodel heeft verschillende regels gedefinieerd voor het laden van inhoud en het benaderen van gegevens. Over het algemeen gelden er minder beperkingen voor het laden van inhoud dan voor het benaderen van gegevens.
Over het algemeen kan inhoud (SWF-bestanden, bitmaps, MP3-bestanden en video’s) van een willekeurige plaats worden geladen, maar als de inhoud uit een ander domein afkomstig is dan de code of de inhoud die wordt geladen, wordt de inhoud in een afzonderlijke beveiligingssandbox geplaatst.
Er zijn een aantal obstakels bij het laden van inhoud:
-
Lokale SWF-bestanden (degene die van een niet-netwerkadres worden geladen, zoals de vaste schijf van een gebruiker) worden standaard in de sandbox Lokaal-met-bestandssysteem geclassificeerd. Deze bestanden kunnen geen inhoud van het netwerk laden. Zie
Lokale sandboxen
voor meer informatie.
-
RTMP-servers (Real-Time Messaging Protocol) kunnen toegang tot inhoud beperken. Zie
Inhoud leveren met RTMP-servers
voor meer informatie.
Wanneer de geladen media een afbeelding, audio of video is, kunnen de gegevens zoals pixel- en geluidsgegevens alleen worden benaderd door een SWF-bestand dat zich buiten de beveiligingssandbox bevindt als het domein van dat SWF-bestand in een bestand met URL-domeinbeleid was opgenomen in het oorspronkelijke domein van de media. Zie
Geladen media benaderen als gegevens
voor meer informatie.
Andere vormen van geladen gegevens zijn tekst- of XML-bestanden die met een object URLLoader worden geladen. Wanneer u gegevens uit een andere beveiligingssandbox wilt benaderen, moet ook hier toestemming worden gegeven aan de hand van een URL-domeinbeleid in het oorspronkelijke domein. Zie
URLLoader en URLStream gebruiken
voor meer informatie.
Opmerking:
Beleidsbestanden zijn nooit vereist om code die wordt uitgevoerd in de sandbox van een AIR-toepassing, externe inhoud of gegevens te laten laden.