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.
|
|
|