Flash Kullanarak Uzaktaki Bir Alan Adından Flex SWF’yi Nasıl Arayabilirsiniz (AS3)

Eğer daha önce Flash ve Flex ile çalıştıysanız, farklı bir alan adından SWF dosyasını çağırmaya çalışırken karşılaşabileceğiniz korkunç SecurityError ile tanışmış olabilirsiniz. Bu hata, özellikle Error #2119, uygulama geliştirme yolculuğunuzda bir engel oluşturabilir ve farklı alanlarda barındırılan SWF’ler arasında sorunsuz etkileşimi engelleyebilir. Bugün bu sorunun üzerine gidecek ve ActionScript 3 (AS3) kullanarak bu sorunu nasıl etkili bir şekilde aşabileceğinizi keşfedeceğiz.

Sorun: Güvenlik Sandalyonun İhlali

Diyelim ki, http://www.a.com/a.swf alanında barındırılan bir Flex SWF’ye sahipsiniz ve başka bir alan adından http://services.nuconomy.com/n.swf adlı farklı bir SWF’yi yüklemek istiyorsunuz. Kodunuz şu şekilde görünebilir:

_loader = new Loader();
var req:URLRequest = new URLRequest("http://services.nuconomy.com/n.swf");
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderFinish);
_loader.load(req);

Ancak uygulama çalıştırıldığında, aşağıdaki istisnayı alırsınız:

SecurityError: Error #2119: Security sandbox violation: caller http://localhost.service:1234/flashTest/Main.swf cannot access LoaderInfo.applicationDomain owned by http://www.b.com/b.swf.

Bu hata genelde, Flash Player’ın güvenlik sandalyonu kısıtlamalarını zorlamasından kaynaklanmaktadır; bu kısıtlamalar, farklı alanlardan sunulan SWF dosyalarının doğrudan birbirleriyle etkileşimde bulunmasını engeller.

Çözüm: Security.allowDomain() ile Erişim Vermek

Çapraz alan erişimini sağlamak için, ActionScript’te Security.allowDomain() yöntemini kullanarak açıkça izin vermeniz gerekecek. İşte bu çözümü etkili bir şekilde ayarlamanın yolu:

Adım 1: Yüklemeye Çalıştığınız SWF’yi Değiştirin

Yüklemeye çalıştığınız SWF dosyasında (bunu http://services.nuconomy.com/n.swf olarak adlandıralım), aşağıdaki kod parçasını eklemeniz gerekecek:

import flash.system.Security;

// Bu SWF ile etkileşimde bulunacak alanı izin ver
Security.allowDomain("http://localhost.service:1234");

Adım 2: Security.allowDomain()‘u Doğru Şekilde Uygulayın

  • Birden Fazla Alan: Eğer uygulamanızın farklı alanlardan erişimi izin vermesi gerekiyorsa, her bir alan için Security.allowDomain()‘u birden fazla kez çağırabilirsiniz.
  • En İyi Uygulamalar: allowDomain()‘ı aşırı kullanmaktan dikkatli olun; bu, SWF dosyanızı güvenlik zafiyetlerine maruz bırakabilir. Sadece güvenilir alanlara izin verin.

Adım 3: Yapılandırmanızı Test Edin

SWF kodunu güncelledikten sonra, uygulamanızı yeniden çalıştırabilirsiniz. Her şey düzgün ayarlandıysa, uzaktaki SWF’den sınıfları yükleyebilmeniz gerekir ve güvenlik ihlalleri tetiklenmemelidir.

Ek Kaynaklar

Daha fazla bilgi edinmek için, Flash’taki güvenlik konularında Adobe’nin kapsamlı dökümantasyonuna başvurabilirsiniz. Özellikle Adobe Flex 3 Programming ActionScript 3 PDF dokümanını inceleyin; özellikle Flash Player Güvenliği ve Çapraz script ile ilgili bölüm 27’yi kontrol edin.

Sonuç

Güvenlik sandalyonun ihlalleri ile karşılaşmak sinir bozucu olabilir, özellikle uygulamanızın işlevselliğini artırmaya çalışırken. Neyse ki, Security.allowDomain() yöntemi sayesinde bu kısıtlamaların üstesinden kolayca gelebilir ve farklı alanlardan SWF’ler arasında sorunsuz iletişimi sağlayabilirsiniz. Bunu dikkatlice uygulayın, yalnızca güvenilir alanlara erişim verin ve başarılı bir entegrasyona doğru yol alacaksınız.

Unutmayın, güvenli kodlama uygulamaları, bağlı bir ortamda uygulamalarınızın bütünlüğünü korumak için hayati öneme sahiptir.