Veilig werken met niet-vertrouwde inhoud

Adobe AIR 1.0 of hoger

Inhoud die niet aan de toepassingssandbox is toegewezen, kan uw toepassing aanvullende scriptfunctionaliteit bieden, maar alleen als wordt voldaan aan de beveiligingscriteria van de runtime. In dit onderwerp wordt het AIR-beveiligingscontract met niet-toepassingsinhoud besproken.

Security.allowDomain()

AIR-toepassingen beperken de toegang van scripts voor niet-toepassingsinhoud in hogere mate dan de Flash Player plug-in voor de browser de toegang van scripts voor niet-vertrouwde inhoud. Bijvoorbeeld: wanneer in Flash Player in de browser een SWF-bestand dat is toegewezen aan de lokaal-vertrouwde sandbox de methode System.allowDomain() aanroept, wordt scripttoegang verleend voor een willekeurig SWF-bestand dat vanaf het opgegeven domein wordt geladen. Deze benadering is niet toegestaan voor toepassingsinhoud in AIR-toepassingen omdat hierdoor onredelijke toegang tot het niet-toepassingsbestand in het bestandssysteem van de gebruiker zou worden verleend. Externe bestanden hebben nooit rechtstreekse toegang tot de toepassingssandbox, ongeacht de aanwezigheid van oproepen van de methode Security.allowDomain() .

Scripting tussen toepassings- en niet-toepassingsinhoud

Voor AIR-toepassingen die scripts gebruiken tussen toepassings- en niet-toepassingsinhoud, gelden complexere beveiligingsmaatregelen. Bestanden die zich niet in de toepassingssandbox bevinden, hebben alleen via een sandboxbridge toegang tot de eigenschappen en methoden van bestanden in de toepassingssandbox. Een sandboxbridge is een gateway tussen toepassings- en niet-toepassingsinhoud, en maakt expliciete interactie tussen de twee bestanden mogelijk. Wanneer een sandboxbridges correct wordt gebruikt, biedt deze een extra beveiligingslaag door te zorgen dat niet-toepassingsinhoud geen toegang heeft tot objectverwijzingen die deel uitmaken van toepassingsinhoud.

Het voordeel van sandboxbridges wordt het best met een voorbeeld geïllustreerd. Dit voorbeeld is gebaseerd op een AIR-toepassing voor een muziekwinkel. De winkel wil adverteerders die hun eigen SWF-bestanden willen maken, een API bieden waarmee de toepassing van de winkel vervolgens kan communiceren. De winkel wil adverteerders methoden bieden waarmee ze artiesten en cd's in de winkel kunnen opzoeken, maar wil om veiligheidsredenen ook bepaalde methoden en eigenschappen onbereikbaar maken voor de SWF-bestanden van de adverteerders.

Een sandboxbridge kan hiervoor zorgen. Inhoud die extern in een AIR-toepassing wordt geladen tijdens het gebruik van de runtime, heeft standaard geen toegang tot methoden of eigenschappen in de hoofdtoepassing. Met een aangepaste sandboxbridge-implementatie kan een ontwikkelaar services voor de externe inhoud bieden zonder deze methoden of eigenschappen toegankelijk te maken. De sandboxbridge is als een pad tussen vertrouwde en niet-vertrouwde inhoud dat communicatie tussen de ladende en de geladen inhoud mogelijk maakt zonder objectverwijzingen toegankelijk te maken.

Zie Scripting tussen de inhoud van verschillende domeinen voor meer informatie over hoe u sandboxbridges veilig gebruikt.

Bescherming tegen dynamisch gegenereerde, onveilige SWF-inhoud

De methode Loader.loadBytes() biedt een toepassing de mogelijkheid om SWF-inhoud te genereren op basis van een bytearray. Injectieaanvallen op gegevens die van externe bronnen worden geladen, kunnen echter ernstige schade toebrengen bij het laden van inhoud. Dit geldt met name bij het laden van gegevens in de toepassingssandbox, waar de gegenereerde SWF-inhoud toegang heeft tot de volledige set van AIR API's.

Er zijn echter ook situaties waarin het gebruik van de methode loadBytes() zonder het genereren van SWF-programmacode vereist is. U kunt de methode loadBytes() gebruiken om grafische gegevens te genereren, bijvoorbeeld om de beeldweergavetiming te besturen. Er zijn ook situaties waarin wel programmacode mag worden gegenereerd, zoals bij het dynamisch genereren van SWF-inhoud voor het afspelen van audio. In AIR staat de methode loadBytes() u standaard niet toe om SWF-inhoud te laden; u mag alleen grafische inhoud laden. In AIR heeft de eigenschap loaderContext van de methode loadBytes() een eigenschap allowLoadBytesCodeExecution , die u op true kunt instellen om de toepassing expliciet toe te staan loadBytes() te gebruiken om SWF-programmacode te laden. In de volgende code wordt getoond hoe u deze functie gebruikt:

var loader:Loader = new Loader(); 
var loaderContext:LoaderContext = new LoaderContext(); 
loaderContext.allowLoadBytesCodeExecution = true; 
loader.loadBytes(bytes, loaderContext);

Als u loadBytes() oproept om SWF-inhoud te laden en de eigenschap allowLoadBytesCodeExecution van het LoaderContext-object is ingesteld op false (dit is de standaardinstelling), genereert het Loader-object een SecurityError-fout.

Opmerking: In een toekomstige versie van Adobe AIR wordt deze API mogelijk aangepast. In dat geval moet u mogelijk de inhoud die gebruikmaakt van de eigenschap allowLoadBytesCodeExecution van de klasse LoaderContext, opnieuw compileren.