Arbeta säkert med icke tillförlitligt innehåll

Adobe AIR 1.0 och senare

Innehåll som inte är tilldelat programsandlådan kan innehålla ytterligare skriptningsfunktioner för programmet, men bara om det möter körtidens säkerhetskriterier. Detta avsnitt förklarar säkerhetskontraktet med icke-programinnehåll i AIR.

Security.allowDomain()

AIR-program begränsar skriptningsåtkomst för icke-programinnehåll mer stringent än vad webbläsar-plug-inen Flash Player begränsar skriptning för icke tillförlitligt innehåll. När en SWF-fil som associeras med sandlådan lokal-tillförlitlig anropar metoden System.allowDomain() i Flash Player i webbläsaren beviljas exempelvis skriptåtkomst till allt SWF-innehåll som lästs in från den angivna domänen. Motsvarande metod är inte tillåten från program innehåll i AIR-program, eftersom detta skulle ge en orimlig åtkomst till användarens filsystem för icke-programfilen. Fjärrfiler kan inte komma åt programsandlådan direkt, även om det finns anrop till metoden Security.allowDomain() .

Skriptning mellan program- och icke-programinnehåll

AIR-program som skriptar mellan program- och icke-programinnehåll har mer invecklade säkerhetsarrangemang. Filer som inte ligger i programsandlådan tillåts endast åtkomst till egenskaper och metoder för filer i programsandlådan genom användandet av en sandlådebrygga. En sandlådebrygga fungerar som en brygga mellan programinnehåll och icke-programinnehåll, vilket ger explicit interaktion mellan de två filerna. När de används på rätt sätt, innebär sandlådebryggor ett extra säkerhetslager som begränsar åtkomsten till objektreferenser som är del av programinnehållet för icke-programinnehåll.

Fördelarna med sandlådebryggor visas bäst genom exempel. Anta att ett AIR-musikbutikprogram vill ge ett API till annonsörer som vill skapa egna SWF-filer som butiksprogrammet sedan kan kommunicera med. Butiken vill ge annonsörerna metoder för att leta upp artister och skivor i butiken, men vill också av säkerhetsskäl isolera några metoder och egenskaper från SWF-filerna från tredje part.

En sandlådebrygga kan innehålla denna funktion. Som standard har innehåll som laddas in i AIR-programmet externt vid körningen inte åtkomst till några metoder eller egenskaper i huvudprogrammet. Med en anpassad sandlådebryggimplementering kan en utvecklare tillhandahålla tjänster till fjärrinnehållet utan att visa dessa metoder eller egenskaper. Se på sandlådebryggan som en stig mellan tillförlitligt och icke-tillförlitligt innehåll, som tillhandahåller kommunikation mellan inläsar- och utläsarinnehåll utan att visa objektreferenser.

Mer information om hur du använder sandlådebryggor på ett säkert sätt finns under Skriptning mellan innehåll i olika domäner .

Skydd mot att dynamiskt generera osäkert SWF-innehåll

Med metoden Loader.loadBytes() kan ett program generera SWF-innehåll från en bytearray. Injektionsattacker på data som är inlästa från fjärrkällor skulle dock kunna orsaka stor skada under inläsning av innehåll. Detta är särskilt sant under inläsning av data till programsandlådan där det genererade SWF-innehållet kan komma åt den fulla uppsättningen AIR-API:er.

Det finns befogade användningar för att nyttja metoden loadBytes() utan att generera körbar SWF-kod. Du kan till exempel använda metoden loadBytes() till att generera bilddata för att kontrollera tiden för bildvisning. Det finns också befogade användningar som förlitar sig på att köra kod, som till exempel dynamiskt skapande av SWF-innehåll för ljuduppspelning. Som standard kan metoden loadBytes() i AIR inte läsa in SWF-innehåll. Den kan bara läsa in bildinnehåll. I AIR har egenskapen loaderContext för metoden loadBytes() en allowLoadBytesCodeExecution -egenskap som du kan ange som true för att ge explicit tillåtelse till programmet att använda loadBytes() för att läsa in körbart SWF-innehåll. Följande kod visar hur funktionen används:

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

Om du anropar loadBytes() för att läsa in SWF-innehåll och egenskapen allowLoadBytesCodeExecution för LoaderContext-objektet är satt till false (standarden), utlöser Loader-objektet ett SecurityError-undantag.

Obs! Detta API kan komma att ändras i en framtida version av Adobe AIR. När det inträffar, kan du behöva kompilera om innehåll som använder egenskapen allowLoadBytesCodeExecution för klassen LoaderContext.