Netwerk-API’s beperken

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

U kunt netwerk-API's op twee manieren beperken. Ter voorkoming van schadelijke activiteiten wordt de toegang tot algemeen gereserveerde poorten geblokkeerd; u kunt deze blokkeringen in uw code niet overschrijven. Als u de toegang van SWF-bestanden tot netwerkfunctionaliteit met betrekking tot andere poorten wilt regelen, kunt u de instelling allowNetworking gebruiken.

Geblokkeerde poorten

Flash Player en Adobe AIR hebben beperkingen op HTTP-toegang tot bepaalde poorten, net als browsers. HTTP-verzoeken mogen niet op bepaalde standaardpoorten worden gedaan die gewoonlijk worden gebruikt voor niet-HTTP-servers.

API's die toegang verkrijgen tot een netwerk-URL vallen onder deze poortblokkeringsbeperkingen. De enige uitzondering vormen API's die sockets direct aanroepen, zoals Socket.connect() en XMLSocket.connect(), of aanroepen naar Security.loadPolicyFile() waarin een socketbeleidsbestand wordt geladen. Socketverbindingen worden toegestaan of geweigerd via het gebruik van socketbeleidsbestanden op de doelserver.

In het volgende overzicht staan de ActionScript 3.0-API's waarop poortblokkering van toepassing is:

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

Poortblokkering is ook van toepassing op het importeren van gedeelde bibliotheken, het gebruik van de tag <img> in tekstvelden en het laden van SWF-bestanden in een HTML-pagina met behulp van de tags <object> en <embed>.

Poortblokkering is ook van toepassing op het gebruik van de tag <img> in tekstvelden en het laden van SWF-bestanden op een HTML-pagina die de tags <object> en <embed> gebruikt.

In het volgende overzicht ziet u welke poorten worden geblokkeerd:

HTTP: 20 (ftp-gegevens), 21 (ftp-controle)

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

Met behulp van de parameter allowNetworking

U kunt de toegang van een SWF-bestand tot netwerkfunctionaliteit beheren door de parameter allowNetworking van de tags <object> en <embed> in te stellen op de HTML-pagina die de SWF-inhoud bevat.

Mogelijke waarden van allowNetworking zijn:

  • "all" (standaardwaarde) - Alle API’s met netwerk hebben toegang tot het SWF-bestand.

  • "internal" - Het SWF-bestand kan geen API’s met browsernavigatie of browserinteractie aanroepen, die verderop in deze sectie worden vermeld, maar kan willekeurig welke andere API met netwerk aanroepen.

  • "none" - Het SWF-bestand kan geen API’s met browsernavigatie of browserinteractie aanroepen, die verderop in deze sectie worden vermeld, en kan ook geen API’s gebruiken die van SWF naar SWF communiceren (ook verderop vermeld).

De parameter allowNetworking is vooral ontworpen voor gebruik wanneer het SWF-bestand en de HTML-pagina die het bestand bevat uit verschillende domeinen afkomstig zijn. Het gebruik van de waarde "internal" of "none" is niet aan te raden wanneer het SWF-bestand dat wordt geladen afkomstig is uit hetzelfde domein als de HTML-pagina's die het bestand bevatten, omdat u dan niet kunt waarborgen dat een SWF-bestand altijd met de bedoelde HTML-pagina wordt geladen. Onbetrouwbare partijen kunnen dan een SWF-bestand uit uw domein laden zonder omvattende HTML, waardoor de beperking allowNetworking niet werkt zoals u dat hebt bedoeld.

Het aanroepen van een niet-toegestane API genereert een uitzondering SecurityError.

Voeg de parameter allowNetworking toe en stel de waarde daarvan in via de tags <object> en <embed> op de HTML-pagina die een verwijzing bevat naar het SWF-bestand (zie het volgende voorbeeld):

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

Een HTML-pagina kan ook een script gebruiken om tags voor SWF-insluiting te genereren. U moet het script wijzigen, zodat dit de juiste instellingen voor allowNetworking invoegt. HTML-pagina's die zijn gegenereerd door Adobe Flash Professional en Adobe Flash Builder gebruiken de AC_FL_RunContent()-functie om referenties naar SWF-bestanden in te sluiten. Voeg de allowNetworking-parameterinstellingen aan het script toe, zoals hier:

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

De volgende API’s zijn niet mogelijk wanneer allowNetworking is ingesteld op "internal":

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

Naast de bovenstaande API's zijn de volgende API's niet mogelijk wanneer allowNetworking is ingesteld op "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()

Zelfs wanneer de geselecteerde instelling voor allowNetworking toestaat dat een SWF-bestand een API met netwerk gebruikt, kunnen er andere beperkingen gelden, op basis van de beperkingen van de beveiligingssandbox (zie Beveiligingssandboxen).

Wanneer allowNetworking is ingesteld op "none", kunt u niet verwijzen naar externe media in een tag <img> in de eigenschap htmlText van een object TextField (een uitzondering SecurityError wordt dan gegenereerd).

Wanneer allowNetworking ingesteld is op "none", wordt een symbool van een geïmporteerde gezamenlijke bibliotheek toegevoegd in de Flash Professional (niet ActionScript) tijdens de runtime geblokkeerd.