Einschränken von Netzwerk-APIs

Flash Player 9 und höher, Adobe AIR 1.0 und höher

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

Die Portsperre gilt außerdem für 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 Adobe Flash Professional und Adobe Flash Builder generierte HTML-Seiten verwenden die AC_FL_RunContent() -Funktion, um Verweise auf SWF-Dateien einzubetten. Fügen Sie dem Skript die Einstellungen für den allowNetworking -Parameter hinzu wie im Folgenden:

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 in Flash Professional (nicht ActionScript) hinzugefügt wurde, zur Laufzeit gesperrt.