Einschränken von Netzwerk-APIs



Netzwerk-APIs können auf zwei Arten eingeschränkt werden: Um böswillige Angriffe zu verhindern, ist der Zugriff auf allgemein reservierte Ports gesperrt. Dies kann in Ihrem Code nicht außer Kraft gesetzt werden. Verwenden Sie die allowNetworking-Einstellung, um den Zugriff einer SWF-Datei auf Netzwerkfunktionen im Hinblick auf andere Ports zu steuern.

Gesperrte Ports

Flash Player und Adobe AIR beschränken den HTTP-Zugriff auf bestimmte Ports, ebenso wie dies in Browsern der Fall ist. HTTP-Anforderungen sind an bestimmten Standardports, die standardmäßig für andere als HTTP-Server verwendet werden, nicht zulässig.

Alle APIs, die auf eine Netzwerk-URL zugreifen, unterliegen diesen Einschränkungen. Die einzige Ausnahme hierzu bilden APIs, die Sockets direkt aufrufen, z. B. Socket.connect() und XMLSocket.connect(), oder Aufrufe der Security.loadPolicyFile()-Methode, in denen eine Socket-Richtliniendatei geladen wird. Socketverbindungen werden durch Verwendung von Socket-Richtliniendateien auf dem Zielserver zugelassen oder verweigert.

In der folgenden Liste sind die ActionScript 3.0-APIs aufgeführt, in denen die Portsperre gilt:

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

Die Portsperre gilt außerdem für den Import freigegebener Bibliotheken, die Verwendung des <img>-Tags in Textfeldern und das Laden von SWF-Dateien auf einer HTML-Seite mit den Tags <object> und <embed>.

In der folgenden Liste sind die gesperrten Ports aufgeführt:

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

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

Verwenden des allowNetworking-Parameters

Sie können den Zugriff einer SWF-Datei auf die Netzwerkfunktionen steuern, indem Sie den Parameter allowNetworking in den Tags <object> und <embed> auf der HTML-Seite mit dem SWF-Inhalt einrichten.

Die zulässigen Werte für allowNetworking sind:

  • "all" (die Standardeinstellung) – Alle Netzwerk-APIs in der SWF-Datei sind zulässig.

  • "internal" – Die SWF-Datei darf keine der unten in diesem Abschnitt aufgeführten Browsernavigations- oder Browserinteraktions-APIs, aber beliebige andere Netzwerk-APIs aufrufen.

  • "none" – Die SWF-Datei darf keine der unten in diesem Abschnitt aufgeführten Browsernavigations- oder Browserinteraktions-APIs aufrufen und kann keine der SWF-zu-SWF-Kommunikations-APIs verwenden, die ebenfalls später beschrieben werden.

Der Parameter allowNetworking wird vor allem dann verwendet, wenn die SWF-Datei und die zugehörige HTML-Seite von unterschiedlichen Domänen stammen. Die Werte „internal" und „none" sollten nicht verwendet werden, wenn die geladene SWF-Datei aus der gleichen Domäne wie die zugehörigen HTML-Seiten stammen, da Sie nicht sicherstellen können, dass eine SWF-Datei immer mit der gewünschten HTML-Seite geladen wird. Nicht vertrauenswürdige Parteien könnten in diesem Fall eine SWF-Datei ohne die zugehörige HTML-Seite laden, sodass die allowNetworking-Einschränkung nicht mehr wie gewünscht greift.

Der Aufruf einer gesperrten API löst eine SecurityError-Ausnahme aus.

Fügen Sie den Parameter allowNetworking hinzu und legen Sie dessen Wert in den Tags <object> und <embed> auf der HTML-Seite fest, die einen Verweis auf die SWF-Datei enthält. Dies wird im folgenden Beispiel gezeigt:

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

Eine HTML-Seite kann auch ein Skript verwenden, um SWF-eingebettete Tags zu erzeugen. Sie müssen das Skript ändern, damit die richtigen allowNetworking-Einstellungen eingefügt werden. Von Flash und Adobe Flex Builder erzeugte HTML-Seiten verwenden die Funktion AC_FL_RunContent(), um Verweise auf SWF-Dateien einzubetten. Fügen Sie Sie allowNetworking-Parametereinstellungen wie folgt zum Skript hinzu:

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

Die folgenden APIs werden gesperrt, wenn allowNetworking auf internal festgelegt ist:

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

Zusätzlich zu den oben aufgeführten APIs werden die folgenden APIs gesperrt, wenn allowNetworking auf none gesetzt ist:

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

Auch wenn die ausgewählte allowNetworking-Einstellung einer SWF-Datei die Verwendung einer Netzwerk-API gestattet, können andere Beschränkungen basierend auf den Einschränkungen der Sicherheits-Sandbox gelten (siehe Sicherheits-Sandboxen).

Ist allowNetworking auf none eingestellt, können Sie in einem <img>-Tag in der Eigenschaft htmlText eines TextField-Objekts nicht auf externe Medien verweisen (es wird eine SecurityError-Ausnahme ausgelöst).

Wenn allowNetworking auf none festgelegt ist, wird ein Symbol, das aus einer importierten freigegebenen Bibliothek im Flash-Authoring-Tool (nicht ActionScript) hinzugefügt wurde, zur Laufzeit gesperrt.