Overzicht van beveiliging in het Flash-platform

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

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:

  • Bronnen in dezelfde beveiligingssandbox hebben altijd toegang tot elkaar;

  • Uitvoerbare code in bestanden in een externe sandbox heeft nooit toegang tot lokale bestanden en gegevens.

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.