Ağ iletişim API'lerini kısıtlama

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

Ağ iletişim API'leri iki şekilde kısıtlanabilir. Kötü amaçlı etkinliği önlemek için, yaygın olarak kısıtlandırılmış bağlantı noktalarına erişim engellenir; kodunuzda bu engelleri geçersiz kılamazsınız. Bir SWF dosyasının, diğer bağlantı noktalarıyla ilgili ağ işlevlerine erişimini denetlemek için, allowNetworking ayarını kullanabilirsiniz.

Engellenen bağlantı noktaları

Flash Player ve Adobe AIR uygulamaları, tıpkı tarayıcılar gibi belirli bağlantı noktalarına HTTP erişiminde kısıtlamalar uygular. HTTP türünde olmayan sunucular için geleneksel olarak kullanılan belirli standart bağlantı noktalarına HTTP isteklerine izin verilmez.

Bir ağ URL'sine erişen tüm API'ler bu bağlantı noktası engelleme kısıtlamalarına tabidir. Tek istisna, Socket.connect() ve XMLSocket.connect() gibi doğrudan soketleri çağıran API'ler veya soket ilke dosyasının yüklendiği Security.loadPolicyFile() öğesine yapılan çağrılardır. Hedef sunucuda soket ilke dosyaları kullanılarak soket bağlantılarına izin verilir veya soket bağlantıları reddedilir.

Aşağıdaki listede, bağlantı noktası engellemesinin geçerli olduğu ActionScript 3.0 API'leri gösterilmektedir:

FileReference.download(), FileReference.upload() , Loader.load() , Loader.loadBytes() , navigateToURL() , NetConnection.call() , NetConnection.connect() , NetStream.play() , Security.loadPolicyFile() , sendToURL() , Sound.load() , URLLoader.load() , URLStream.load()

Ayrıca Shared Library içe aktarılması, metin alanlarında <img> etiketinin kullanılması ve <object> ve <embed> etiketleri kullanılarak HTML sayfasında SWF dosyalarının yüklenmesi işlemlerinde de bağlantı noktası engelleme geçerlidir.

Ayrıca metin alanlarında <img> etiketinin kullanılması ve <object> ve <embed> etiketleri kullanılarak HTML sayfasında SWF dosyalarının yüklenmesi işlemlerinde de bağlantı noktası engelleme geçerlidir.

Aşağıdaki listelerde, hangi bağlantı noktalarının engellendiği gösterilmektedir:

HTTP: 20  (ftp verileri), 21 (ftp denetimi)

HTTP ve FTP: 1 (tcpmux), 7 (echo), 9 (discard), 11 (systat), 13 (daytime), 15 (netstat), 17 (qotd), 19 (chargen), 22 (ssh), 23 (telnet), 25 (smtp), 37 (time), 42 (name), 43 (nicname), 53 (domain), 77 (priv-rjs), 79 (finger), 87 (ttylink), 95 (supdup), 101 (hostriame), 102 (iso-tsap), 103 (gppitnp), 104 (acr-nema), 109 (pop2), 110 (pop3), 111 (sunrpc), 113 (auth), 115 (sftp), 117 (uucp-path), 119 (nntp), 123 (ntp), 135 (loc-srv / epmap), 139 (netbios), 143 (imap2), 179 (bgp), 389 (ldap), 465 (smtp+ssl), 512 (print / exec), 513 (login), 514 (shell), 515 (printer), 526 (tempo), 530 (courier), 531 (chat), 532 (netnews), 540 (uucp), 556 (remotefs), 563 (nntp+ssl), 587 (smtp), 601 (syslog), 636 (ldap+ssl), 993 (ldap+ssl), 995 (pop3+ssl), 2049 (nfs), 4045 (lockd), 6000 (x11)

allowNetworking parametresini kullanma

SWF içeriğini barındıran HTML sayfasında <object> ve <embed> etiketlerinde allowNetworking parametresini ayarlayarak bir SWF dosyasının ağ işlevlerine erişimini denetleyebilirsiniz.

Olası allowNetworking değerleri şunlardır:

  • "all" (varsayılan)—SWF dosyasında tüm ağ iletişimi API'lerine izin verilir.

  • "internal" —SWF dosyası, tarayıcı gezinmesini veya bu bölümün ilerleyen kısımlarında listelenen tarayıcı etkileşimi API'lerini çağıramaz ancak diğer ağ iletişimi API'lerini çağırabilir.

  • "none" —SWF dosyası, tarayıcı gezinmesini veya bu bölümün ilerleyen kısımlarında listelenen tarayıcı etkileşimi API'lerini çağıramaz ve yine ilerleyen bölümlerde listelenen herhangi bir SWF'den SWF'ye iletişim API'sini kullanamaz.

allowNetworking parametresi birincil olarak SWF dosyası ve kapsayan HTML sayfası farklı etki alanlarından olduğunda kullanılmak üzere tasarlanmıştır. SWF dosyasının her zaman planladığınız HTML sayfasıyla yüklenmesini sağlayamadığınızdan, SWF dosyası, kapsayan HTML sayfalarıyla aynı etki alanından geldiğinde "internal" veya "none" değerinin kullanılması önerilmez. Güvenilmeyen taraflar, kapsayan bir HTML olmadan etki alanınızda bir SWF'yi yükleyebilir ve bu durumda da allowNetworking kısıtlaması tasarladığınız şekilde çalışmaz.

Önlenmiş bir API çağrıldığında SecurityError istisnası atılır.

Aşağıdaki örnekte gösterildiği gibi, allowNetworking parametresini ekleyin ve SWF dosyasının başvurusunu içeren HTML sayfasında <object> ve <embed> etiketlerinde bu parametrenin değerini ayarlayın:

<object classic="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" 
    Code base="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,124,0"  
    width="600" height="400" ID="test" align="middle"> 
<param name="allowNetworking" value="none" /> 
<param name="movie" value="test.swf" /> 
<param name="bgcolor" value="#333333" />  
<embed src="test.swf" allowNetworking="none" bgcolor="#333333"  
    width="600" height="400" 
    name="test" align="middle" type="application/x-shockwave-flash"  
    pluginspage="http://www.macromedia.com/go/getflashplayer" /> 
</object>

HTML sayfası aynı zamanda SWF gömme etiketlerini oluşturmak için bir komut dosyası da kullanabilir. Komut dosyasını uygun allowNetworking ayarlarını ekleyecek şekilde değiştirmeniz gerekir. Adobe Flash Professional ve Adobe Flash Builder tarafından oluşturulan HTML sayfaları, SWF dosyalarının başvurularını gömmek için AC_FL_RunContent() işlevini kullanır. Aşağıdaki gibi, komut dosyasına allowNetworking parametresi ayarlarını ekleyin:

AC_FL_RunContent( ... "allowNetworking", "none", ...)

allowNetworking öğesi "internal" olarak ayarlandığında aşağıdaki API'ler önlenir:

navigateToURL() , fscommand() , ExternalInterface.call()

allowNetworking öğesi "none" olarak ayarlandığında, önceki listede bulunan API'lere ek olarak şu API'ler de önlenir:

sendToURL() , FileReference.download() , FileReference.upload() , Loader.load() , LocalConnection.connect() , LocalConnection.send() , NetConnection.connect() , NetStream.play() , Security.loadPolicyFile() , SharedObject.getLocal() , SharedObject.getRemote() , Socket.connect() , Sound.load() , URLLoader.load() , URLStream.load() , XMLSocket.connect()

Seçilen allowNetworking ayarı, bir SWF dosyasının ağ iletişimi API'sini kullanmasına izin verse de, güvenlik sanal alanı sınırlamalarına bağlı olarak başka kısıtlamalar da olabilir (bkz. Güvenlik sanal alanları ).

allowNetworking öğesi "none" olarak ayarlandığında, bir TextField nesnesinin htmlText özelliğinde <img> etiketindeki harici ortama başvuramazsınız. (SecurityError istisnası atılır.)

allowNetworking öğesi "none" olarak ayarlandığında, Flash Professional'da (ActionScript'te değil) eklenmiş içe aktarılan bir paylaşılan kütüphanedeki sembol, çalışma zamanında engellenir.