Beveiligingssandboxen

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Clientcomputers kunnen individuele bestanden met code, inhoud en gegevens uit een aantal bronnen verkrijgen, zoals via externe websites, lokale bestandssystemen of geïnstalleerde AIR-toepassingen. De runtimes van Flash Player en AIR wijzen codebestanden en andere resources (zoals gezamenlijke objecten, bitmaps, geluiden, video’s en gegevensbestanden) afzonderlijk aan beveiligingssandboxen toe op basis van hun locatie op het moment dat deze werden geladen. In de volgende secties worden de regels beschreven die door de runtimes worden afgedwongen en die bepalen waartoe code of inhoud die binnen een bepaalde sandbox wordt uitgevoerd, toegang kan krijgen.

Zie het Flash Player Developer Center-onderwerp over beveiliging op www.adobe.com/go/devnet_security_nl voor meer informatie over beveiliging in Flash Player.

Externe sandboxen

De runtimes van Flash Player en AIR plaatsen elementen (waaronder SWF-bestanden) van internet in afzonderlijke sandboxen die dezelfde naam hebben als het domein waaruit ze afkomstig zijn. Elementen die bijvoorbeeld zijn geladen van example.com, worden in een andere beveiligingssandbox geplaatst dan elementen die zijn geladen van foo.org. Deze bestanden hebben standaard toegang tot alle bronnen van de eigen server. Externe SWF-bestanden kunnen toegang krijgen tot aanvullende gegevens op andere domeinen via expliciete bevoegdheden van de website of maker, zoals URL-beleidsbestanden en de methode Security.allowDomain(). Zie Controlemiddelen voor websites (beleidsbestanden) en Controlemiddelen voor auteurs (ontwikkelaars) voor meer informatie.

Externe SWF-bestanden kunnen geen lokale bestanden of bronnen laden.

Zie het Flash Player Developer Center-onderwerp over beveiliging op www.adobe.com/go/devnet_security_nl voor meer informatie over beveiliging in Flash Player.

Lokale sandboxen

Lokaal bestand beschrijft elk bestand waarnaar wordt verwezen door gebruik van het bestand: protocol of een UNC-pad (Universal Naming Convention). Lokale SWF-bestanden worden in een van vier lokale sandboxen geplaatst:

  • De sandbox Lokaal-met-bestandssysteem - Om veiligheidsredenen plaatsen de runtimes van Flash Player en AIR alle lokale bestanden standaard in deze sandbox. Vanuit deze sandbox kunnen lokale bestanden door uitvoerbare code worden gelezen (bijvoorbeeld met de klasse URLLoader), maar kan deze code op geen enkele manier communiceren met het netwerk. Op die manier weet de gebruiker zeker dat lokale gegeven niet worden gelekt naar het netwerk of op enige andere manier ongewenst wordt gedeeld.

  • De sandbox Lokaal-met-netwerk. Bij het compileren van een SWF-bestand kunt u opgeven dat dit netwerktoegang heeft wanneer het als een lokaal bestand wordt uitgevoerd (zie Het type sandbox van lokale SWF-bestanden instellen). Het bestand wordt dan in deze sandbox geplaatst. SWF-bestanden die zijn toegewezen aan de sandbox Lokaal-met-netwerk hebben geen toegang tot het lokale bestandssysteem. Ze hebben wel toegang tot gegevens op het netwerk. Een SWF-bestand kan in dit geval echter geen gegevens lezen die zijn afgeleid van het netwerk, tenzij daartoe bevoegdheden zijn toegekend, via een bestand met interdomeinbeleid of het aanroepen van de methode Security.allowDomain(). Om dergelijke bevoegdheden te kunnen toekennen, moet een bestand met interdomeinbeleid toegang verschaffen aan alle domeinen via <allow-access-from domain="*"/ > of via Security.allowDomain("*"). Zie Controlemiddelen voor websites (beleidsbestanden) en Controlemiddelen voor auteurs (ontwikkelaars) voor meer informatie.

  • De sandbox Lokaal-vertrouwd—Lokale SWF-bestanden die zijn geregistreerd als vertrouwd (door gebruikers of geïnstalleerde programma’s) worden in de sandbox Lokaal-vertrouwd geplaatst. Systeembeheerders en gebruikers kunnen uit beveiligingsoverwegingen een lokaal SWF-bestand opnieuw toewijzen, dat wil zeggen uit of naar de sandbox Lokaal-vertrouwd verplaatsen (zie Controlemiddelen voor beheerders en Controlemiddelen voor gebruikers). SWF-bestanden die zijn toegewezen aan de sandbox Lokaal-vertrouwd , kunnen communiceren met andere SWF-bestanden en gegevens laden (zowel externe als lokale).

  • De sandbox van de AIR-toepassing—Deze sandbox bevat inhoud die is geïnstalleerd met de actieve AIR-toepassing. Standaard kan code die wordt uitgevoerd in de sandbox van een AIR-toepassing, vanuit elk gewenst domein cross-scripting uitvoeren. Bestanden buiten de sandbox van een AIR-toepassing hebben echter geen toestemming om cross-scripting op de code in de sandbox van de toepassing toe te passen. Standaard kunnen code en inhoud in de sandbox van een AIR-toepassing vanuit elk gewenst domein inhoud en gegevens laden.

Communicatie tussen de sandbox Lokaal-met-netwerk en de sandbox Lokaal-met-bestandssysteem, alsmede tussen de sandbox Lokaal-met-bestandssysteem en de externe sandboxen, is ten strengste verboden. Er kan geen toestemming voor dergelijke communicatie worden verleend door een toepassing die wordt uitgevoerd in Flash Player of door een gebruiker of beheerder.

Voor scriptbewerkingen tussen lokale HTML-bestanden en lokale SWF-bestanden (in beide richtingen), bijvoorbeeld via de klasse ExternalInterface, moeten zowel het HTML-bestand als het SWF-bestand zich in de sandbox Lokaal-vertrouwd bevinden. De reden hiervoor is dat de lokale-beveiligingsmodellen voor browsers afwijken van het lokale-beveiligingsmodel van Flash Player.

SWF-bestanden in de sandbox Lokaal-met-netwerk kunnen geen SWF-bestanden laden die zich in de sandbox Lokaal-met-bestandssysteem bevinden. SWF-bestanden in de sandbox Lokaal-met-bestandssysteem kunnen geen SWF-bestanden laden die zich in de sandbox Lokaal-met-netwerk bevinden.

De sandbox van AIR-toepassingen

Aan het beveiligingssandboxmodel van Flash Player, wordt door de runtime van Adobe AIR nog een sandbox toegevoegd, namelijk de sandbox van de toepassing. Bestanden die worden geïnstalleerd als deel van een AIR-toepassing, worden in de sandbox van de toepassing geplaatst. Voor andere bestanden die door de toepassing worden geladen, gelden beveiligingsbeperkingen die overeenkomen met de beperkingen die in het reguliere Flash Player-beveiligingsmodel zijn opgegeven.

Bij de installatie van een toepassing worden alle bestanden in het AIR-pakket geïnstalleerd in een toepassingsmap op de computer van de gebruiker. Ontwikkelaars kunnen in de programmacode naar deze map verwijzen via het URL-schema app:/ (zie URI-schema's). Alle bestanden in de toepassingsmapstructuur worden bij het starten van de toepassing aan de toepassingssandbox toegewezen. De inhoud van de toepassingssandbox heeft alle toegangsrechten die beschikbaar zijn voor een AIR-toepassing, zoals interactie met het lokale bestandssysteem.

Vele AIR-toepassingen gebruiken alleen deze lokaal geïnstalleerde bestanden om de toepassing uit te voeren. AIR-toepassingen zijn echter niet beperkt tot de bestanden in de toepassingsmap; ze kunnen een willekeurig type bestand van een willekeurige bron laden. Dit geldt onder andere voor lokale bestanden op de computer van de gebruiker en bestanden op beschikbare externe bronnen, zoals op een lokaal netwerk of internet. Het type van de bestanden heeft geen invloed op de beveiligingsbeperkingen: geladen HTML-bestanden hebben dezelfde beveiligingsrechten als geladen SWF-bestanden van dezelfde bron.

De inhoud van de toepassingsbeveiligingssandbox heeft toegang tot AIR API's die niet kunnen worden gebruikt door de inhoud van andere sandboxen. Voorbeeld: de eigenschap air.NativeApplication.nativeApplication.applicationDescriptor, die de inhoud van het descriptorbestand van de toepassing weergeeft, is beperkt tot de inhoud van de toepassingsbeveiligingssandbox. Een ander voorbeeld van een beperkte API is de klasse FileStream, die methoden voor het lezen van en schrijven naar het lokale bestandssysteem bevat.

ActionScript-API's die alleen beschikbaar zijn voor de inhoud in de beveiligingssandbox van een toepassing, zijn in de Naslaggids voor ActionScript 3.0 voor het Adobe Flash-platform gemarkeerd met het AIR-logo. Als deze API's in andere sandboxen worden gebruikt, genereert de runtime een SecurityError-fout.

Bij HTML-inhoud (in een HTMLLoader-object) zijn alle AIR JavaScript API's (de API's die beschikbaar zijn via de eigenschap window.runtime, of via het object air bij het gebruik van het bestand AIRAliases.js) beschikbaar voor inhoud van de toepassingsbeveiligingssandbox. De HTML-inhoud in andere sandboxen heeft geen toegang tot de eigenschap window.runtime, zodat deze inhoud geen toegang heeft tot de API's van AIR of Flash.

Voor inhoud die binnen de sandbox van een AIR-toepassing wordt uitgevoerd, gelden de volgende aanvullende beperkingen:

  • Voor de HTML-inhoud van de toepassingsbeveiligingssandbox zijn er beperkingen betreffende het gebruik van API's die tekenreeksen dynamisch in programmacode kunnen omzetten nadat de code is geladen. Hierdoor wordt voorkomen dat de toepassing onbedoeld code van niet-toepassingsbronnen (zoals mogelijk onveilige netwerkdomeinen) opneemt (en uitvoert). Een voorbeeld hiervan is het gebruik van de functie eval(). Zie Codebeperkingen voor de inhoud van verschillende sandboxenvoor meer informatie.

  • Om mogelijke phishingaanvallen te blokkeren worden img -tags in de HTML-inhoud van ActionScript TextField-objecten genegeerd in de SWF-inhoud van de toepassingsbeveiligingssandbox.

  • De inhoud van de toepassingssandbox kan geen gebruik maken van het protocol asfunction in de HTML-inhoud van ActionScript 2.0-tekstvelden.

  • De SWF-inhoud van de toepassingssandbox kan geen gebruik maken van de cross-domain cache, een nieuwe functie vanaf Flash Player 9 Update 3. Met deze functie kan Flash Player de inhoud van componenten van het Adobe-platform opslaan in een niet-vluchtige cache en vervolgens op aanvraag opnieuw gebruiken in geladen SWF-inhoud (zodat de inhoud niet meerdere keren opnieuw hoeft te worden geladen).

Beperkingen voor JavaScript in AIR

In tegenstelling tot de inhoud van de toepassingsbeveiligingssandbox kan JavaScript-inhoud van een niet-toepassingsbeveiligingssandbox wel de functie eval() aanroepen om op elk gewenst moment dynamisch gegenereerde code uit te voeren. Er gelden in AIR echter wel beperkingen voor JavaScript-inhoud die in een beveiligingssandbox die niet van een toepassing is, wordt uitgevoerd. Deze zijn onder meer:

  • JavaScript-code in een niet-toepassingssandbox heeft geen toegang tot het object window.runtime, zodat deze code geen AIR API's kan uitvoeren.

  • De inhoud van een niet-toepassingsbeveiligingssandbox kan standaard geen XMLHttpRequest-oproepen gebruiken om gegevens te laden van andere domeinen dan het domein waarvan de aanvraag afkomstig is. Toepassingscode kan niet-toepassingsinhoud hiervoor echter toestemming geven door een kenmerk allowCrossdomainXHR in te stellen in het containerframe of iframe. Zie Codebeperkingen voor de inhoud van verschillende sandboxen voor meer informatie.

  • Er zijn beperkingen betreffende het oproepen van de JavaScript-methode window.open(). Zie Beperkingen betreffende het oproepen van de JavaScript-methode window.open()voor meer informatie.

  • De HTML-inhoud van externe (netwerk-) beveiligingssandboxen kan alleen inhoud van het type CSS, frame, iframe of img vanaf externe domeinen (netwerk-URL's) laden.

  • De HTML-inhoud van lokaal-met-bestandssysteem, lokaal-met-netwerk of lokaal-vertrouwde sandboxen kan alleen inhoud van het type CSS, frame, iframe of img uit lokale sandboxen (niet van toepassings- of netwerk-URL's) laden.

Zie Codebeperkingen voor de inhoud van verschillende sandboxenvoor meer informatie.

Het type sandbox van lokale SWF-bestanden instellen

Een eindgebruiker of de beheerder van een computer kan opgeven dat een lokaal SWF-bestand vertrouwd is, zodat dit bestand gegevens van alle domeinen kan laden, zowel lokaal als op het netwerk. Dit wordt opgegeven in de map Global Flash Player Trust en in de map User Flash Player Trust. Zie Controlemiddelen voor beheerders en Controlemiddelen voor gebruikers.

Zie Lokale sandboxen voor meer informatie over lokale sandboxen.

Adobe Flash Professional

U kunt een SWF-bestand voor de lokaal-met-bestandssysteem of de lokaal-met-netwerk sandbox configureren door de publicatie-instellingen van het document in het programma voor het schrijven van programmacode in te stellen.

Adobe Flex

U kunt een SWF-bestand configureren voor de sandbox Lokaal-met-bestandssysteem of voor de sandbox Lokaal-met-netwerk door de markering use-network in de Adobe Flex-compiler in te stellen. Zie “About the application compiler options” in Building and Deploying Adobe Flex 3 Applications voor meer informatie.

De eigenschap Security.sandboxType

Een maker van een SWF-bestand kan aan de hand van de statische alleen-lezen eigenschap Security.sandboxType bepalen aan welk type sandbox de runtime van Flash Player of AIR het SWF-bestand heeft toegewezen. De klasse Security bevat de volgende constanten die mogelijke waarden van de eigenschap Security.sandboxType vertegenwoordigen:

  • Security.REMOTE—Het SWF-bestand is afkomstig van een internet-URL en wordt uitgevoerd volgens op domein gebaseerde sandboxregels.

  • Security.LOCAL_WITH_FILE—Het SWF-bestand is een lokaal bestand dat niet door de gebruiker als vertrouwd is opgegeven en niet is gepubliceerd met een netwerkbestemming. Het SWF-bestand kan informatie lezen van lokale gegevensbronnen, maar kan niet met internet communiceren.

  • Security.LOCAL_WITH_NETWORK—Het SWF-bestand is een lokaal bestand dat niet door de gebruiker als vertrouwd is opgegeven, maar wel is gepubliceerd met een netwerkbestemming. Het SWF-bestand kan met internet communiceren maar kan geen informatie lezen van lokale gegevensbronnen.

  • Security.LOCAL_TRUSTED—Het SWF-bestand is een lokaal bestand dat door de gebruiker als vertrouwd is opgegeven via Settings Manager of een configuratiebestand in de map FlashPlayerTrust. Het SWF-bestand kan informatie lezen van lokale gegevensbronnen en kan met internet communiceren.

  • Security.APPLICATION— Het SWF-bestand wordt uitgevoerd in een AIR-toepassing en is geïnstalleerd met het pakket (AIR-bestand) voor die toepassing. Standaard kunnen bestanden in de sandbox van de AIR-toepassing cross-scripting uitvoeren vanuit elk gewenst domein. Bestanden buiten de AIR-toepassingssandbox hebben echter geen toestemming om cross-scripting in het AIR-bestand toe te passen. Standaard kunnen bestanden in de sandbox van de AIR-toepassing inhoud en gegevens laden vanuit elk gewenst domein.