Begränsa nätverks-API:er

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Nätverks-API:er kan begränsas på två sätt. Skadlig aktivitet förhindras genom att åtkomsten till portar som brukar reserveras blockeras. Du kan inte åsidosätta dessa spärrar i koden. Om du vill styra en SWF-fils åtkomst till nätverksfunktioner med hänsyn till andra portar använder du inställningen allowNetworking.

Blockerade portar

Flash Player och Adobe AIR (och även webbläsare) har bara HTTP-åtkomst via vissa portar. HTTP-förfrågningar tillåts inte på vissa standardportar som brukar användas för andra typer av servrar än HTTP-servrar.

Dessas portbegränsningar gäller för alla API:er som försöker komma åt en nätverks-URL. Det enda undantaget är API:er som anropar socketar direkt, till exempel Socket.connect() och XMLSocket.connect(), eller anrop till Security.loadPolicyFile() där en socketprincipfil läses in. Socketanslutningar tillåts eller nekas via socketprincipfiler på målservern.

I listan nedan visas vilka ActionScript 3.0-API:er som portblockering gäller för:

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

Portblockering gäller också för import av delade bibliotek, användningen av taggen <img> i textfält och inläsningen av SWF-filer till en HTML-sida med hjälp av taggarna <object> och <embed>.

Portblockering gäller också för användningen av taggen <img> i textfält och inläsningen av SWF-filer till en HTML-sida med hjälp av taggarna <object> och <embed>.

I listan nedan visas vilka portar som blockeras:

HTTP: 20 ( ftp data), 21 (ftp control)

HTTP och  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)

Använda parametern allowNetworking

Du kan kontrollera SWF-filens åtkomst till nätverksfunktioner genom inställningar i allowNetworking-parametern i <object>- och <embed>-taggarna på HTML-sidan där SWF-innehållet finns.

Tillåtna värden för allowNetworking:

  • "all" (standardvärde) – Alla nätverks-API:er tillåts i SWF-filen.

  • "internal" – SWF-filen får inte anropa webbläsarnavigering eller webbläsarinteraktioner för API:er (se längre fram i avsnittet), men den kan anropa alla andra nätverks-API:er.

  • "none" – SWF-filen får inte anropa webbläsarnavigering eller webbläsarinteraktioner för API:er (se längre fram i avsnittet) och den kan inte använda några kommunikations-API:er av typen SWF-till-SWF (också längre fram i avsnittet).

Parametern allowNetworking används i huvudsak när SWF-filen och den omslutande HTML-sidan kommer från olika domäner. Du bör inte använda värdet "internal" eller "none" när SWF-filen läses in från samma domän som de omslutande HTML-sidorna, eftersom du inte kan säkerställa att en SWF-fil alltid läses in med rätt HTML-sida. Otillförlitliga parter kan läsa in en SWF-fil från din domän utan omslutande HTML, och då fungerar inte begränsningen allowNetworking på det sätt som du har tänkt.

Om en icke tillgänglig API anropas genereras ett SecurityError-undantag.

Lägg till parametern allowNetworking och ange dess värde i taggarna <object> och <embed> på HTML-sidan som innehåller en referens till SWF-filen, enligt följande exempel:

<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>

En HTML-sida kan också använda ett skript för att generera SWF-inbäddningstaggar. Du måste ändra skriptet så att det lägger in rätt allowNetworking-inställningar. HTML-sidor som genererats av Adobe Flash Professional och Adobe Flash Builder använder funktionen AC_FL_RunContent() för att bädda in referenser till SWF-filer. Lägg till inställningarna för parametern allowNetworking i skriptet enligt följande:

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

Följande API:er är inte tillgängliga när allowNetworking har värdet "internal":

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

Förutom API:erna i ovanstående lista är följande API:er inte heller tillgängliga när allowNetworking har värdet "none":

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()

Även om den markerade allowNetworking-inställningen tillåter en SWF-fil att använda ett nätverks-API kan det finnas andra restriktioner på grund av säkerhetssandlådans begränsningar (se Säkerhetssandlådor).

Om allowNetworking anges till "none" kan du inte referera till externa medier i en <img>-tagg i egenskapen htmlText i ett TextField-objekt (ett SecurityError-undantag sker).

När allowNetworking är inställt på none blockeras en symbol från ett importerat delat bibliotek som lagts till i Flash Professional (inte ActionScript) vid körning.