Güvenilmeyen içerikle güvenli biçimde çalışma

Adobe AIR 1.0 ve üstü

Uygulama sanal alanına atanmayan içerik, ancak çalışma zamanının güvenlik ölçütlerini karşılayabilirse uygulamanıza ek komut dosyası işlevleri sağlayabilir. Bu başlık, uygulama dışı içerikle AIR güvenlik sözleşmesini açıklar.

Security.allowDomain()

AIR uygulamaları, uygulama dışı içerik için komut dosyası erişimini, Flash Player tarayıcı eklentisinin güvenilmeyen içerik için komut dosyası erişimini kısıtladığından daha sıkı biçimde kısıtlar. Örneğin, local-trusted bir sanal alana atanmış SWF dosyası System.allowDomain() yöntemini çağırdığında, tarayıcıdaki Flash Player'da belirtilen etki alanından yüklenen herhangi bir SWF'ye komut dosyası oluşturma erişimi verilir. Kullanıcının bilgisayarındaki uygulama dışı dosyalara akılcı olmayan bir biçimde erişim sağlayacağından, benzer yaklaşıma AIR uygulamalarındaki application içeriğinden izin verilmez. Security.allowDomain() yöntemine yapılan çağrılar dikkate alınmaksızın, uzak dosyalar uygulama sanal alanına doğrudan erişemez.

Uygulama içeriği ve uygulama dışı içerik arasında komut dosyası oluşturma

Uygulama içeriği ve uygulama dışı içerik arasında komut dosyası oluşturan AIR uygulamaları, daha karmaşık güvenlik düzenlemelerine sahiptir. Uygulama sanal alanında yer almayan dosyalar, sanal alan köprüsü kullanımı yoluyla yalnızca uygulama sanal alanındaki dosyaların özelliklerine ve yöntemlerine erişebilir. Bir sanal alan köprüsü, uygulama içeriği ve uygulama dışı içerik arasında, iki dosya arasındaki açık etkileşimi sağlayan bir ağ geçidi olarak görev yapar. Sanal alan köprüleri, doğru kullanıldığında uygulama dışı içeriğin uygulama içeriğinin parçası olan nesne başvurularına erişimini kısıtlayarak fazladan bir güvenlik katmanı sağlar.

Sanal alan köprülerinin faydaları, örnekle en iyi şekilde gösterilebilir. AIR müzik deposu uygulamasının, depo uygulamasının sonradan iletişim kurabileceği kendi SWF dosyalarını oluşturmak isteyen reklamcılara bir API sağlamak istediğini düşünün. Depo, reklamcılara depodan sanatçıları ve CD'leri arayabilecekleri yöntemler sağlamak, ancak aynı zamanda güvenlik nedenleriyle bazı yöntemleri ve özellikleri üçüncü taraf SWF dosyasının kullanımına kapatmak istiyor.

Bu işlevleri bir sanal alan köprüsü sağlayabilir. Varsayılan olarak, bir AIR uygulamasına çalışma zamanında harici olarak yüklenen içerik, ana uygulamadaki yöntemler ve özelliklere erişemez. Geliştirici, özel bir sanal alan köprüsü uygulamasıyla bu yöntemleri ve özellikleri göstermeden uzak içeriğe servis sağlayabilir. Sanal alan köprüsünü, yükleyen ve yüklenen içerik arasındaki iletişimi nesne başvurularını göstermeden sağlayan, güvenilen ve güvenilmeyen içerik arasında yer alan bir patika olarak düşünün.

Sanal alan köprülerinin nasıl güvenli biçimde kullanılacağına ilişkin daha fazla bilgi için bkz. Farklı etki alanlarındaki içerikler arasında komut dosyası oluşturma .

Dinamik olarak güvenilir olmayan SWF içeriği oluşturmaya karşı koruma

Loader.loadBytes() yöntemi, uygulamanın bir bayt dizisinden SWF içeriği oluşturması için bir yol sağlar. Ancak, uzak kaynaktan yüklenen verilerdeki yerleştirme saldırıları, içerik yükleme sırasında ciddi hasara neden olabilir. Bu, özellikle oluşturulan SWF içeriği tüm AIR API'leri kümesine erişebiliyorsa, uygulama sanal alanına veri yükleme sırasında geçerlidir.

loadBytes() yöntemini yürütülebilir SWF kodu oluşturmadan kullanabilen geçerli kullanıcılar vardır. Örneğin, görüntü zamanlamasını denetlemek için görüntü verileri oluşturmak amacıyla loadBytes() yöntemini kullanabilirsiniz. Ses oynatma için dinamik SWF oluşturma gibi, kod yürütmeyi kullanan geçerli kullanıcılar da vardır. AIR'de, loadBytes() yöntemi varsayılan olarak SWF içeriği yüklemenize izin vermez ; yalnızca görüntü içeriği yüklemenize izin verir. AIR'de loadBytes() yönteminin loaderContext özelliği, uygulamanın yürütülebilir SWF içeriğini yüklemek üzere loadBytes() kullanmasına izin vermek için true olarak ayarlayabileceğiniz allowLoadBytesCodeExecution özelliğini içerir. Aşağıdaki kod, bu özelliğin nasıl kullanılacağını gösterir:

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

SWF içeriği yüklemek için loadBytes() çağırdığınızda ve LoaderContext nesnesinin allowLoadBytesCodeExecution özelliği false (varsayılan) olarak ayarlandığında, the Loader nesnesi bir SecurityError istisnası atar.

Not: Adobe AIR'in gelecekteki bir sürümünde bu API değişebilir. Bu gerçekleştiğinde, LoaderContext sınıfının allowLoadBytesCodeExecution özelliğini kullanan içeriği yeniden derlemeniz gerekebilir.