Säkerhet med Flash Platform – översikt

Flash Player 9 och senare, Adobe AIR 1.0 och senare

En stor del av säkerhetsmodellen som används av körtiderna i Flash Player och AIR bygger på ursprungsdomänen för inlästa SWF-filer, HTML, media och andra resurser. Körbar kod i en fil från en specifik Internetdomän, till exempel www.example.com, kan alltid få åtkomst till alla data från den domänen. Dessa resurser placeras i samma säkerhetsgruppering, även kallad säkerhetssandlåda. (Mer information finns i Säkerhetssandlådor.)

Exempelvis kan en ActionScript-kod i en SWF-fil läsa in SWF-filer, bitmappar, ljud, textfiler och andra resurser från sin egen domän. Dessutom tillåts alltid korsskriptning mellan två SWF-filer från samma domän, så länge båda filerna är skrivna i ActionScript 3.0. Korsskriptning innebär att kod i en fil kan komma åt de egenskaper, metoder och objekt som definieras av koden i en annan fil.

Korsskriptning används inte mellan SWF-filer skrivna i ActionScript 3.0 eller tidigare; däremot kan dessa filer kommunicera via klassen LocalConnection. Möjligheten för en SWF-fil att korsskripta SWF-filer i ActionScript 3.0 från andra domäner och att läsa in data från andra domäner är som standard otillåten. Tillstånd kan emellertid ges med ett anrop till metoden Security.allowDomain() i den inlästa SWF-filen. Mer information finns i Korsskriptning.

Följande grundläggande säkerhetsregler gäller alltid som standard:

  • Resurser i samma säkerhetssandlåda har alltid åtkomst i båda riktningar.

  • Körbara koder i filer i en fjärrsandlåda kan aldrig få åtkomst till lokala filer och data.

I körtiderna i Flash Player och AIR betraktas följande domäner som individuella, och tilldelas individuella säkerhetssandlådor:

  • http://example.com

  • http://www.example.com

  • http://store.example.com

  • https://www.example.com

  • http://192.0.34.166

Om en namngiven domän, till exempel http://example.com, har en mappning till en specifik IP-adress, till exempel http://192.0.34.166, tilldelas de separata säkerhetssandlådor i körtiderna.

Det finns två grundläggande metoder som en utvecklare kan använda för att ge SWF-filen åtkomst till resurser från andra sandlådor än den egna:

I säkerhetsmodellerna för körtider i Flash Player och AIR är det en skillnad mellan inläsning av innehåll och extrahering eller åtkomst av data. Innehåll definieras som media, även visuella media som kan visas med körtider, ljud, video eller SWF-filer eller HTML som innehåller visningsmedier. Data definieras som något som är tillgängligt endast för kod. Innehåll och data läses in på olika sätt.

  • Läsa in innehåll – du kan läsa in innehåll med hjälp av klasser som Loader, Sound och NetStream, med MXML-taggar när du använder Flex eller med HTML-taggar i ett AIR-program.

  • Extrahera data – Du kan extrahera data från inläst medieinnehåll med hjälp av Bitmap-objekt, BitmapData.draw()-metoden, Sound.id3-egenskapen eller SoundMixer.computeSpectrum()-metoden.

  • Komma åt data – du kan komma åt data direkt genom att läsa in dem från en extern fil (till exempel en XML-fil) med hjälp av klasser som URLStream, URLLoader, FileReference, Socket och XMLSocket. I AIR tillhandahålls ytterligare klasser för att läsa in data, till exempel FileStream och XMLHttpRequest.

I Flash Players säkerhetsmodell definieras olika regler för inläsning av innehåll och åtkomst av data. Generellt finns det färre restriktioner för inläsning av innehåll än för åtkomst av data.

Generellt kan innehåll (SWF-filer, bitmappar, mp3-filer och videoklipp) läsas in från valfri plats, men om innehållet kommer från en annan domän än den där koden eller innehållet läses in, kommer det att partitioneras i en separat säkerhetssandlåda.

Det finns några begränsningar vid inläsning av innehåll:

  • Som standard klassificeras lokala SWF-filer (som läses in från en icke-nätverksadress, t.ex. användarens hårddisk) i sandlådan lokal-med-filsystem. Sådana filer kan inte läsa in innehåll från nätverket. Mer information finns i Lokala sandlådor.

  • Servrar som används med RTMP (Real-Time Messaging Protocol) kan ge begränsad åtkomst till innehåll. Mer information finns i Innehåll som levereras via RTMP-servrar.

Om ett inläst medium är en bild, ljud eller video kan dess data (t.ex. pixeldata, ljuddata) bara ges åtkomst av en SWF-fil utanför säkerhetssandlådan om SWF-filens domän ingick i en URL-principfil i mediets ursprungliga domän. Mer information finns i Åtkomst av inlästa medier som data.

Andra former av inlästa data omfattar text eller XML-filer, som läses in med objektet URLLoader. Om du vill läsa in data från annan säkerhetssandlåda, måste även i detta fall tillstånd beviljas via en URL-principfil i ursprungsdomänen. Mer information finns i Använda URLLoader och URLStream.

Obs! Det krävs aldrig principfiler för att kod som körs i AIR-programsandlådan ska läsa in fjärrinnehåll eller fjärrdata.