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