Çapraz komut dosyası oluşturma

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

ActionScript 3.0 ile yazılmış iki SWF dosyası veya AIR uygulamasında çalıştırılan iki HTML dosyası aynı alandan sunuluyorsa—örneğin, bir SWF dosyasının URL'si http://www.example.com/swfA.swf ve diğerinin URL'si http://www.example.com/swfB.swf olursa—bu durumda bir dosyada tanımlanan kod, diğerinin değişkenlerini, nesneleri, özellikleri, yöntemleri vb.'ni inceleyebilir ve değiştirebilir. Buna çapraz komut dosyası oluşturma denir.

Eğer iki dosya farklı alanlardan sunulursa, örneğin http://siteA.com/swfA.swf ve http://siteB.com/swfB.swf gibi, —varsayılan olarak Flash Player ve AIR ne swfA.swf dosyasının, swfB.swf komut dosyasını oluşturmasına; ne de swfB.swf dosyasının swfA.swf komut dosyasını oluşturmasına izin vermez. SWF dosyası, Security.allowDomain() öğesini çağırarak başka etki alanlarındaki SWF dosyalarına izin verir. swfB.swf dosyası Security.allowDomain("siteA.com") öğesini çağırarak, siteA.com konumundaki SWF dosyalarının swfB.swf dosyasının komut dosyasını oluşturmasına izin verir.

AVM1 SWF dosyaları ile AVM2 SWF dosyaları arasında çapraz komut dosyası oluşturma desteklenmez. AVM1 SWF dosyası, ActionScript 1.0 veya ActionScript 2.0 kullanılarak oluşturulmuş bir SWF dosyasıdır. (AVM1 ve AVM2, ActionScript Virtual Machine'i ifade eder.) Ancak AVM1 ve AVM2 arasında veri göndermek için LocalConnection sınıfını kullanabilirsiniz.

Etki alanlar arası durumlarda iki tarafın da net olması önemlidir. Bu açıklamanın amaçları doğrultusunda, çapraz komut dosyası oluşturma işlemini gerçekleştiren taraf erişen taraf (genellikle SWF dosyasına erişen taraf) ve diğer taraf da erişilen taraf (genellikle erişilen SWF) olarak adlandırılır. Aşağıdaki resimde gösterildiği gibi, siteA.swf dosyası siteB.swf dosyasının komut dosyasını oluşturduğunda, siteA.swf erişen taraf, siteB.swf ise erişilen taraf olur:

Security.allowDomain() yöntemiyle oluşturulan etki alanları arası izinler asimetriktir. Önceki örnekte, siteA.swf dosyası siteB.swf dosyasının komut dosyasını oluşturabilir ancak siteA.swf dosyası siteB.com konumundaki SWF dosyalarının siteA.swf dosyasının komut dosyasını oluşturmasına izin vermek için Security.allowDomain() yöntemini çağırmadığından, siteB.swf dosyası siteA.swf dosyasının komut dosyasını oluşturamaz Her iki SWF dosyasının Security.allowDomain() yöntemini çağırmasını sağlayarak simetrik izinler ayarlayabilirsiniz.

Flash Player, SWF dosyalarını, başka SWF dosyaları tarafından oluşturulan etki alanları arası komut dosyası oluşturmaya karşı korumaya ek olarak, HTML dosyaları tarafından oluşturulan etki alanları arası komut dosyası oluşturmaya karşı da korur. HTML'den SWF'ye komut dosyası oluşturma, ExternalInterface.addCallback() yöntemi üzerinden oluşturulan geri çağrılarla gerçekleşebilir. HTML'den SWF'ye komut dosyası oluşturma, etki alanları arasında gerçekleşir, erişilen SWF dosyasının, tıpkı erişen taraf bir SWF dosyası olduğunda olduğu gibi Security.allowDomain() yöntemini çağırması gerekir, aksi takdirde işlem başarısız olur. Daha fazla bilgi için, bkz. Yazar (geliştirici) denetimleri.

Ayrıca, Flash Player uygulaması, SWF'den HTML'e komut dosyası oluşturmaya yönelik güvenlik denetimleri sağlar. Daha fazla bilgi için, bkz. Giden URL erişimini denetleme.

Sahne Alanı güvenliği

Stage nesnesinin bazı özellikleri ve yöntemleri, görüntüleme listesindeki herhangi bir hareketli grafik veya film klibi için kullanılabilir durumdadır.

Ancak Stage nesnesinin bir sahibi vardır: yüklenen birinci SWF dosyası. Varsayılan olarak, Stage nesnesinin şu özellik ve yöntemleri yalnızca Stage sahibiyle aynı güvenlik sanal alanında bulunan SWF dosyaları için kullanılabilir durumdadır:

Özellikler

Yöntemler

align

addChild()

displayState

addChildAt()

frameRate

addEventListener()

height

dispatchEvent()

mouseChildren

hasEventListener()

numChildren

setChildIndex()

quality

willTrigger()

scaleMode

 

showDefaultContextMenu

 

stageFocusRect

 

stageHeight

 

stageWidth

 

tabChildren

 

textSnapshot

 

width

 

Sahne Alanı sahibinin sanal alanı dışındaki bir sanal alanda bulunan SWF dosyasının bu özellik ve yöntemlere erişmesi için, Sahne Alanı sahibi SWF dosyasının, harici sanal alanın etki alanına izin vermek için Security.allowDomain() yöntemini çağırması gerekir. Daha fazla bilgi için, bkz. Yazar (geliştirici) denetimleri.

frameRate özelliği özel bir durumdur—herhangi bir SWF dosyası frameRate özelliğini okuyabilir. Ancak, yalnızca Sahne Alanı sahibinin güvenlik sanal alanında bulunanlar (veya Security.allowDomain() yöntemine yapılan bir çağrıyla izin verilenler) özelliği değiştirebilir.

Stage nesnesinin removeChildAt() ve swapChildrenAt() yöntemlerinde de kısıtlamalar vardır ancak bunlar diğer kısıtlamalardan farklıdır. Bu yöntemleri çağırmak için, Sahne Alanı sahibiyle aynı etki alanında olma zorunluluğu yerine, kodun, etkilenen alt nesnelerin sahibiyle aynı etki alanında olması gerekir veya alt nesneler Security.allowDomain() yöntemini çağırabilir.

Görüntüleme listesinde geçiş yapma

Tek bir SWF dosyasının diğer sanal alanlardan yüklenmiş görüntüleme nesnelerine erişme yeteneği kısıtlandırılmıştır. SWF dosyasının, farklı bir sanal alanda başka bir SWF dosyası tarafından oluşturulmuş bir görüntüleme nesnesine erişmesi için, erişilen SWF dosyasının, erişen SWF dosyasının etki alanına erişim izni vermek üzere Security.allowDomain() yöntemini çağırması gerekir. Daha fazla bilgi için, bkz. Yazar (geliştirici) denetimleri.

Loader nesnesi tarafından yüklenen bir Bitmap nesnesine erişmek için, görüntü dosyasının kaynak sunucusunda bir URL ilke dosyasının bulunması ve bu ilke dosyasının, Bitmap nesnesine erişmeye çalışan SWF dosyasının etki alanına izin vermesi gerekir (bkz. Web sitesi denetimleri (ilke dosyaları)).

Yüklenen bir dosyaya (ve Loader nesnesine) karşılık gelen LoaderInfo nesnesi, yüklenen nesne ile Loader nesnesi arasındaki ilişkiyi tanımlayan şu üç özelliği içerir: childAllowsParent, parentAllowsChild ve sameDomain.

Olay güvenliği

Görüntüleme listesiyle ilgili olaylar, olayı gönderen görüntüleme nesnesinin sanal alanı esas alınarak güvenlik erişimi sınırlamalarına sahiptir. Görüntüleme listesindeki bir olay köpürme ve yakalama aşamalarına sahiptir (bkz. Olayları işleme). Köpürme ve yakalama aşamalarında bir olay, kaynak görüntüleme nesnesinden, görüntüleme listesindeki üst görüntüleme nesneleri yoluyla alınır. Üst nesne, kaynak görüntüleme nesnesinden farklı bir güvenlik sanal alanındaysa, üst nesne sahibi ile kaynak nesne sahibi arasında karşılıklı güven onayı yoksa, yakalama ve köpürme aşaması bu üst nesnenin aşağısında durdurulur. Bu karşılıklı güven onayı şu şekilde elde edilebilir:

  1. Üst nesneye sahip SWF dosyasının, kaynak nesneye sahip SWF dosyasının etki alanına güven onayı vermek için Security.allowDomain() yöntemini çağırması gerekir.

  2. Kaynak nesneye sahip SWF dosyasının, üst nesneye sahip SWF dosyasının etki alanına güven onayı vermek için Security.allowDomain() yöntemini çağırması gerekir.

Yüklenen bir dosyaya (ve Loader nesnesine) karşılık gelen LoaderInfo nesnesi, yüklenen nesne ile Loader nesnesi arasındaki ilişkiyi tanımlayan şu iki özelliği içerir: childAllowsParent and parentAllowsChild.

Görüntüleme nesneleri dışındaki nesnelerden gönderilen olaylar için, güvenlik kontrolleri veya güvenlikle ilgili bir uygulama yoktur.