Behörighetskontroller

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Säkerhetsmodellen för klientkörningen i Flash Player är utformad för resurser, vilka är objekt som t.ex. SWF-filer, lokala data och URL-adresser. Det är intressenter som äger eller använder dessa resurser. Intressenter kan ange säkerhetsinställningar för sina egna resurser och varje resurs har fyra intressenter. I Flash Player används en strikt behörighetshierarki för dessa inställningar:

Behörighetshierarki
Hierarki med säkerhetsinställningar

Detta innebär t.ex. att om en administratör begränsar åtkomsten till en resurs kan ingen annan intressent åsidosätta den begränsningen.

För AIR-program gäller de här behörighetskontrollerna endast innehåll som körs utanför AIR-programsandlådan.

Administrativa inställningar

En administratörsanvändare (inloggad med administratörsbehörigheter) kan tillämpa säkerhetsinställningar i Flash Player som påverkar alla andra användare. I en ickeföretagsmiljö, t.ex. i en dator i hemmet, är det vanligtvis en användare som även har administratörsbehörighet. Även i en företagsmiljö kan individuella användare ha administratörsbehörighet till datorn.

Det finns två typer av administrativa användarinställningar:

  • Filen mms.cfg

  • Katalogen Global Flash Player Trust

Filen mms.cfg

Filen mms.cfg är en textfil med vilken administratörer kan bevilja eller begränsa åtkomsten till olika funktioner. När Flash Player startas läses säkerhetsinställningarna in från den här filen och används för att begränsa funktioner. Filen mms.cfg innehåller inställningar som administratören använder för att hantera funktioner som sekretessinställningar, lokal filsäkerhet, socketanslutningar och så vidare.

En SWF-fil har åtkomst till viss information om funktioner som har avaktiverats via anrop av egenskaperna Capabilities.avHardwareDisable och Capabilities.localFileReadDisable. Däremot är de flesta inställningarna i filen mms.cfg oåtkomliga från ActionScript.

Om du vill tillämpa programoberoende säkerhets- och sekretesspolicy för en dator ska mms.cfg-filen ändras av enbart systemadministratörer. Filen mms.cfg är inte avsedd att användas av installationsprogram. Trots att ett installationsprogram som körs med administratörsbehörighet kan ändra innehållet i filen mms.cfg betraktar Adobe en sådan ändring som överträdelse från användarens sida och uppmanar utvecklare av installationsprogram att aldrig ändra filen mms.cfg.

Filen mms.cfg sparas på följande plats:

  • Windows: system\Macromed\Flash\mms.cfg

    (t.ex. C:\WINDOWS\system32\Macromed\Flash\mms.cfg)

  • Mac: app support/Macromedia/mms.cfg

    (t.ex. /Library/Application Support/Macromedia/mms.cfg)

Mer information om filen mms.cfg finns i administrationshandboken för Flash på www.adobe.com/go/flash_player_admin_se.

Katalogen Global Flash Player Trust

Administratörsanvändare och installationsprogram kan registrera angivna lokala SWF-filer som tillförlitliga för alla användare. Dessa SWF-filer är tilldelade sandlådan lokal-tillförlitlig. De kan användas med valfria andra SWF-filer och de kan läsa in data från valfri annan plats; externt eller lokalt. Filer betecknas som tillförlitliga i katalogen Global Flash Player Trust, på följande plats:

  • Windows: system\Macromed\Flash\FlashPlayerTrust

    (t.ex. C:\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust)

  • Mac: app support/Macromedia/FlashPlayerTrust

    (t.ex. /Library/Application Support/Macromedia/FlashPlayerTrust)

Katalogen Flash Player Trust kan innehålla valfritt antal textfiler, där var och en innehåller tillförlitliga sökvägar, med en sökväg per rad. Varje sökväg kan vara en enskild SWF-fil, HTML-fil eller katalog. Kommentarsrader inleds med symbolen #. En Trust-konfigurationsfil i Flash Player med följande text ger tillförlitlighetsstatus till alla filer i angiven katalog och alla underkataloger:

# Trust files in the following directories: 
C:\Documents and Settings\All Users\Documents\SampleApp

Sökvägarna som anges i en Trust-konfigurationsfil måste alltid vara lokala sökvägar eller sökvägar i SMB-nätverk. Eventuella HTTP-sökvägar i en Trust-konfigurationsfil ignoreras; endast lokala filer kan vara tillförlitliga.

För att undvika konflikter ger du varje Trust-konfigurationsfil ett filnamn som motsvarar installationsprogrammet och använder .cfg som filtillägg.

Som utvecklare som fördelar en lokal SWF-fil via ett installationsprogram kan du se till att installationsprogrammet lägger till en konfigurationsfil till katalogen Global Flash Player Trust. På så vis tilldelas fullständig behörighet till filen du fördelar till användarna. Installationsprogrammet måste köras av en användare med administratörsbehörighet. Till skillnad från filen mms.cfg inkluderas katalogen Global Flash Player Trust för att installationsprogram ska tilldela behörighet för tillförlitlighet. Både administratörsanvändare och installationsprogram kan ange tillförlitliga lokala program med hjälp av katalogen Global Flash Player Trust.

Det finns även Flash Player Trust-kataloger för individuella användare (se Användarinställningar).

Användarinställningar

Flash Player innehåller tre olika mekanismer för behörighetsinställningar på användarnivå: inställningsgränssnittet, inställningshanteraren och katalogen User Flash Player Trust.

Inställningsgränssnittet och inställningshanteraren

Inställningsgränssnittet är en snabb, interaktiv mekanism för inställningskonfigurationen för en specifik domän. Inställningshanteraren har ett mer detaljerat gränssnitt och ger möjlighet till globala ändringar som påverkar behörigheter för flera eller alla domäner. Dessutom, vid en begäran om en ny behörighet av en SWF-fil där beslut avseende säkerhet eller sekretess krävs under körning, så visas dialogrutor där användare kan justera vissa inställningar i Flash Player.

Inställningshanteraren och inställningsgränssnittet innehåller säkerhetsalternativ, som kamera- och mikrofoninställningar, inställningar för lagring av delade objekt, inställningar för äldre innehåll och så vidare. Varken inställningshanteraren eller inställningsgränssnitten är tillgängliga för AIR-program.

Obs! Eventuellt gjorda inställningar i filen mms.cfg (se Administrativa inställningar) visas inte i inställningshanteraren.

Mer information om inställningshanteraren finns på www.adobe.com/go/settingsmanager_se.

Katalogen User Flash Player Trust

Användare och installationsprogram kan registrera angivna lokala SWF-filer som tillförlitliga. Dessa SWF-filer är tilldelade sandlådan lokal-tillförlitlig. De kan användas med valfria andra SWF-filer och de kan läsa in data från valfri annan plats; externt eller lokalt. En användare anger en fil som tillförlitlig i katalogen User Player Trust, som finns i samma katalog som lagringsutrymmet för delade objekt, på följande platser (platserna är specifika för aktuell användare):

  • Windows: app data\Macromedia\Flash Player\#Security\FlashPlayerTrust

    (t. ex. C:\Documents and Settings\JohnD\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust i Windows XP eller C:\Users\JohnD\AppData\Roaming\Macromedia\Flash Player\#Security\FlashPlayerTrust i Windows Vista)

    I Windows döljs mappen Application Data som standard. Om du vill visa dolda mappar och filer öppnar du Utforskaren i Windows med Den här datorn, väljer Verktyg > Mappalternativ och markerar sedan fliken Visa. Markera alternativet Visa dolda filer och mappar på fliken Visa.

  • Mac: app data/Macromedia/Flash Player/#Security/FlashPlayerTrust

    (t.ex. /Users/JohnD/Library/Preferences/Macromedia/Flash Player/#Security/FlashPlayerTrust)

    Dessa inställningar påverkar endast den aktuella användaren, inga andra som loggar in på datorn. Om en användare utan administratörsbehörighet installerar ett program i sin egen del i systemet så registreras programmet, via katalogen User Flash Player Trust, som tillförlitligt för just den användaren.

    Som utvecklare som fördelar en lokal SWF-fil via ett installationsprogram kan du se till att installationsprogrammet lägger till en konfigurationsfil till katalogen User Flash Player Trust. På så vis tilldelas fullständig behörighet till filen du fördelar till användarna. Även i den här situationen utförs en kontroll av användarinställningar i filen i User Flash Player Trust, eftersom det är en användaråtgärd som initierar den.

    Det finns även en Global Flash Player Trust-katalog som används av administratören eller installationsprogram vid registreringar av program för samtliga användare i ett datorsystem (se Administrativa inställningar).

Webbplatsinställningar (principfiler)

För att göra data från en webbserver tillgängliga för SWF-filer från andra domäner kan du skapa en principfil på servern. En principfil är en XML-fil som placeras på en särskild plats på servern.

Principfiler påverkar åtkomsten till flera resurser, exempelvis:

  • Data i bitmappar, ljud och video

  • Inläsning av XML- och textfiler

  • Import av SWF-filer från andra säkerhetsdomäner till säkerhetsdomänen för inläsande SWF-fil

  • Åtkomst till socket- och XML-socketanslutningar

ActionScript-objekt instansierar två olika typer av serveranslutningar: dokumentbaserade serveranslutningar och socketanslutningar. ActionScript-objekt som t.ex. Loader, Sound, URLLoader och URLStream instansierar dokumentbaserade serveranslutningar och var och en av dessa objekt läser in en fil från en URL-adress. Objekt i ActionScript Socket och XMLSocket gör socketanslutningar som används med direktuppspelningsdata, inte inlästa dokument.

Eftersom Flash Player har stöd för två typer av serveranslutningar, finns det två typer av principfiler: URL-principfiler och socketprincipfiler.
  • För dokumentbaserade anslutningar krävs URL-principfiler. Med dessa filer kan servern ange att dess data och dokument är tillgängliga för SWF-filer som hanteras från vissa domäner eller från alla domäner.

  • För socketanslutningar krävs socketprincipfiler, som möjliggör nätverksanslutning direkt vid en lägre TCP-socketnivå, med hjälp av klasserna Socket och XMLSocket.

Flash Player kräver att principfilerna överförs med samma protokoll som anslutningen vill använda. Om du till exempel placerar en principfil på HTTP-servern ges SWF-filer från andra domäner tillstånd att läsa in data från den som HTTP-server. Om du inte anger någon socketprincipfil på samma server tillåter du inte SWF-filer från andra domäner att ansluta till servern på socketnivå. Metoden som används vid hämtning av socketprincipfilen måste m.a.o. matcha anslutningsmetoden.

Hur principfiler används och syntaxen beskrivs i korthet i resten av avsnittet, då de gäller för SWF-filer som publiceras för Flash Player 10. (Hur principfiler implementeras skiljer sig något från tidigare versioner av Flash Player, eftersom säkerheten har förstärkts i senare versioner av Flash Player.) Mer information om principfiler finns i avsnittet om ändringar av principfiler i Flash Player 9 på Flash Player Developer Center på www.adobe.com/go/devnet_security_en.

Kod som körs i AIR-programsandlådan kräver ingen principfil för att komma åt data från en URL eller socket. Kod i ett AIR-program som körs i en icke-programsandlåda kräver ingen principfil.

Huvudprincipfiler

Flash Player (och AIR-innehåll som inte finns i AIR-sandlådan application) söker som standard först efter en URL-principfil med namnet crossdomain.xml i rotkatalogen på servern, och söker sedan efter en socketprincipfil på port 843. En fil som finns på någon av dessa platser kallas för huvudprincipfil. (När det gäller socketanslutningar söker Flash Player också efter en socketprincipfil på samma port som huvudanslutningen. En principfil som finns vid den porten betraktas emellertid inte som någon huvudprincipfil.)

Förutom att ange åtkomstbehörigheter kan huvudprincipfilen också innehålla en metaprincip-sats. En metaprincip anger vilka platser som kan innehålla principfiler. Standardmetaprincipen för URL-principfiler är ”master-only”, vilket innebär att /crossdomain.xml är den enda principfil som tillåts på servern. Standardmetaprincipen för socketprincipfiler är ”all”, vilket innebär att alla socketar på värden kan fungera som socketprincipfil.

Obs! I Flash Player 9 och tidigare var standardprinciperna för URL-principer ”all”, vilket innebär att alla kataloger kan innehålla en principfil. Om du har installerat program som läser in principfiler från andra platser än standardfilen /crossdomain.xml, och dessa program kanske inte körs i Flash Player 10, måste du (eller serveradministratören) ändra huvudprincipfilen så att andra principfiler tillåts. Mer information om hur du anger en annan metaprincip finns i avsnittet om ändringar av principfiler i Flash Player 9 på Flash Player Developer Center på www.adobe.com/go/devnet_security_en.

En SWF-fil kan söka efter ett annat principfilsnamn eller en annan katalog genom anrop av metoden Security.loadPolicyFile(). Om huvudprincipfilen inte anger att målplatsen kan hantera principfiler, har anropet till loadPolicyFile() ingen effekt, även om det finns en principfil på den platsen. Anropa loadPolicyFile() innan du försöker med några nätverksåtgärder som kräver principfilen. Flash Player ställer automatiskt nätverksförfrågningar i kö bakom deras motsvarande principfilsförsök. Det går till exempel att anropa Security.loadPolicyFile() omedelbart innan en nätverksåtgärd initieras.

När Flash Player söker efter en huvudprincipfil väntar programmet i tre sekunder på ett svar från servern. Om inget svar kommer, förutsätts det att det inte finns någon huvudprincipfil. Det finns emellertid inget standardvärde för timeout för anrop till loadPolicyFile(). Flash Player förutsätter att filen som anropas finns, och väntar så länge det behövs för att läsa in den. Om du vill vara säker på att huvudprincipfilen läses in ska du därför anropa den explicit med loadPolicyFile().

Även om metoden heter Security.loadPolicyFile(), läses ingen principfil in förrän ett nätverksanrop som kräver en principfil skickas. Anrop till loadPolicyFile() anger bara för Flash Player var programmet ska söka efter principfiler när de behövs.

Du kan inte meddelas om när en principfilsbegäran initieras eller slutförs, och det finns ingen anledning till att detta ska göras. Flash Player utför principkontroller asynkront, och väntar med att initiera anslutningarna tills principfilskontrollerna har slutförts.

Avsnitten nedan innehåller information som bara gäller för URL-principfiler. Mer information om socketprincipfiler finns i Ansluta till socketar.

URL-principfilens omfång

En URL-principfil gäller bara för den katalog varifrån inläsningen görs och i respektive underkataloger. En principfil i rotkatalogen tillämpas alltså på hela servern, medan en principfil som läses in från någon underkatalog gäller endast i den katalogen och respektive underkataloger.

En principfil påverkar åtkomsten endast till den specifika servern där den finns placerad. En principfil som t.ex. finns på https://www.adobe.com:8080/crossdomain.xml tillämpas bara på datainläsningsanrop som görs till www.adobe.com över HTTPS på porten 8080.

Ange åtkomstbehörighet i en URL-principfil

En principfil innehåller en enstaka <cross-domain-policy>-tagg, vilken i sin tur innehåller noll eller flera <allow-access-from>-taggar. Varje <allow-access-from>-tagg innehåller ett attribut, domain, vilket anger antingen en exakt IP-adress, en exakt domän eller en jokerteckendomän (valfri domän). Jokerteckendomäner anges på något av två sätt:
  • Men en enkel asterisk (*), som matchar alla domäner och alla IP-adresser

  • Med en asterisk följt av ett suffix, som bara matchar de domäner som slutar med angivet suffix

Suffixen måste börja med en punkt. Jokerteckendomäner med suffix kan emellertid matcha domäner som består av bara suffixet utan inledande punkt. Till exempel betraktas xyz.com att tillhöra *.xyz.com. Jokertecken tillåts inte i IP-domänspecifikationer.

I följande exempel visas en URL-principfil som ger åtkomst till SWF-filer som kommer från *.example.com, www.friendOfExample.com och 192.0.34.166:

<?xml version="1.0"?> 
<cross-domain-policy> 
    <allow-access-from domain="*.example.com" /> 
    <allow-access-from domain="www.friendOfExample.com" /> 
    <allow-access-from domain="192.0.34.166" /> 
</cross-domain-policy>

Om du anger en IP-adress ges åtkomst bara till SWF-filer som lästs in från denna IP-adress med IP-syntax (t.ex. http://65.57.83.12/flashmovie.swf). Ingen åtkomst beviljas till SWF-filer som använder domännamnssyntax. DNS-upplösning utförs inte av Flash Player.

Du kan ge åtkomst till dokument som härstammar från valfri domän, vilket visas i följande exempel:

<?xml version="1.0"?> 
<!-- http://www.foo.com/crossdomain.xml --> 
<cross-domain-policy> 
<allow-access-from domain="*" /> 
</cross-domain-policy>

Varje <allow-access-from>-tagg har även ett valfritt secure-attribut, vars standardvärde är true. Du kan ange false för attributet om din principfil finns på en HTTPS-server och om du vill tillåta SWF-filer på en icke-HTTP-server att läsa in data från HTTPS-servern.

Om secure-attributet har värdet false kan säkerheten som HTTPS erbjuder äventyras. Speciellt om attributet anges med false, då öppnas säkert innehåll för spionage och bedrägeri. Adobe rekommenderar att du inte anger attributet secure med false.

Om de data som ska läsas in finns på en HTTPS-server, men SWF-filen som läser in dem finns på en HTTP-server, bör du flytta den inläsande SWF-filen till en HTTPS-server. På så sätt skyddas alla data med HTTPS. Om du däremot beslutar att du måste behålla inläsande SWF-fil på en HTTP-server så lägger du till attributet secure="false" till <allow-access-from>-taggen, enligt följande kod:

<allow-access-from domain="www.example.com" secure="false" /> 
Ett annat element som du kan använda för att bevilja åtkomst är taggen allow-http-request-headers-from. Det här elementet beviljar en klient som är värd för innehåll från en annan behörighetsdomän att skicka användardefinierade huvuden till din domän. Taggen <allow-access-from> ger andra domäner behörighet att hämta data från din domän, medan taggen allow-http-request-headers-from ger andra domäner behörighet att skicka data till din domän, i form av huvuden. I följande exempel tillåts alla domäner att skicka SOAPAction-huvudet till den aktuella domänen:
<cross-domain-policy> 
    <allow-http-request-headers-from domain="*" headers="SOAPAction"/> 
</cross-domain-policy>

Om satsen allow-http-request-headers-from finns i huvudprincipfilen, gäller den för alla kataloger på värden. Annars gäller den bara för katalogen och underkatalogerna för principfilen som innehåller programsatsen.

Förhandsladda principfiler

Att läsa in data från en server eller ansluta till en socket är en asynkron åtgärd. Flash Player väntar på att principfilen ska sluta laddas ned innan huvudåtgärden inleds. Att extrahera pixeldata från bilder eller extrahera exempeldata från ljud är emellertid synkrona åtgärder. Principfilen måste läsas in innan du kan extrahera data. När du läser in media anger du att det ska söka efter en principfil:

  • När du använder metoden Loader.load() anger du egenskapen checkPolicyFile för parametern context, vilket är ett LoaderContext-objekt.

  • När du bäddar in en bild i ett textfält med hjälp av <img>-taggen anger du attributet checkPolicyFile för <img>-taggen med "true" enligt följande:

    <img checkPolicyFile = "true" src = "example.jpg">
  • När du använder metoden Sound.load() anger du egenskapen checkPolicyFile för parametern context, vilket är ett SoundLoaderContext-objekt.

  • När du använder klassen NetStream anger du egenskapen checkPolicyFile för NetStream-objektet.

När du anger en av dessa parametrar söker Flash Player först efter principfiler som redan har laddats ned för domänen. Sedan söker programmet efter principfilen på standardplatsen på servern, och söker både efter programsatsen <allow-access-from> och en metaprincip. Slutligen undersöks om väntande anrop till metoden Security.loadPolicyFile() finns i omfånget.

Författarinställningar (för utvecklare)

Det huvud-API för ActionScript som används för att tilldela behörighet är metoden Security.allowDomain(). Den ger behörighet till SWF-filer i de domäner du anger. I följande exempel tilldelar en SWF-fil åtkomst till SWF-filer som hanteras från domänen www.example.com:

Security.allowDomain("www.example.com")

Den här metoden ger behörighet till följande:

Det primära syftet med anrop av metoden Security.allowDomain() är att tilldela behörighet till SWF-filer i en extern domän som ska skripta SWF-filen som anropar metoden Security.allowDomain(). Mer information finns i Korsskriptning.

Att en IP-adress anges som parameter till metoden Security.allowDomain() innebär inte att alla parter från den angivna IP-adressen får åtkomst. Endast de parter som lästes in genom att IP-adressen angavs i deras webbadresser ges åtkomst, i stället för med ett domännamn som mappar till IP-adressen. Om till exempel domännamnet www.example.com mappar till IP-adressen 192.0.34.166 kommer ett anrop till Security.allowDomain("192.0.34.166") inte att ges åtkomst till www.example.com.

Du kan skicka jokertecknet "*" till metoden Security.allowDomain() för att tillåta åtkomst från alla domäner. Eftersom det ger behörighet för SWF-filer från alla domäner att skripta anropande SWF-fil måste du använda jokertecknet "*" med försiktighet.

ActionScript innehåller ett andra behörighets-API, med namnet Security.allowInsecureDomain(). Den här metoden gör samma sak som metoden Security.allowDomain(), förutom att den vid anrop från en SWF-fil som opereras från en säker HTTPS-anslutning dessutom ger åtkomst till anropande SWF-fil via andra SWF-filer som opereras från ett osäkert protokoll (t.ex. HTTP). Däremot är det ingen bra säkerhetsrutin att tillåta skriptning mellan filer från ett säkert protokoll (HTTPS) och från osäkra protokoll (HTTP); detta öppnar säkert innehåll för spionage och bedrägeri. Så här kan ett angrepp se ut: eftersom metoden Security.allowInsecureDomain() tillåter åtkomst till dina säkra HTTPS-data via SWF-filer som opereras över HTTP-anslutningar, kan en angripare som gått emellan din HTTP-server och dina användare ersätta HTTP SWF-filen med sin egen, vilket då kan ge åtkomst till dina HTTPS-data.

Viktigt! Kod som körs i AIR-programsandlådan har inte behörighet att anropa metoderna allowDomain() eller allowInsecureDomain() i klassen Security.

En annan viktig säkerhetsrelaterad metod är Security.loadPolicyFile(), som gör att Flash Player söker efter en principfil på en icke-standardplats. Mer information finns i Webbplatsinställningar (principfiler).