限制網路 API

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

網路 API 可以用兩種方式加以限制。為了阻止惡意活動,封鎖了一般已保留連接埠的存取;您不能在程式碼中覆寫這些封鎖作業。若要控制 SWF 檔存取與其他連接埠相關的網路功能,您可以使用 allowNetworking 設定。

已封鎖的連接埠

Flash Player 和 Adobe AIR 會限制 HTTP 存取特定連接埠,與瀏覽器相同。在慣常供非 HTTP 類型伺服器使用的特定標準連接埠上不允許執行 HTTP 要求。

任何存取網路 URL 的 API 都會受到這些連接埠封鎖限制拘束。唯一例外的是直接呼叫通訊端的 API,例如 Socket.connect()XMLSocket.connect(),或者呼叫 Security.loadPolicyFile(),會在其中載入通訊端原則檔。通訊端連線是透過使用目標伺服器上的通訊端原則來決定允許或拒絕。

以下列出適用於通訊埠封鎖的 ActionScript 3.0 API:

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

通訊埠封鎖也適用於「共享元件庫」匯入作業、在文字欄位中使用 <img> 標籤,以及使用 <object><embed> 標籤載入 HTML 頁面中的 SWF 檔。

通訊埠封鎖也適用於在文字欄位中使用 <img> 標籤,以及使用 <object><embed> 標籤載入 HTML 頁面中的 SWF 檔。

下面清單列出已封鎖的連接埠:

HTTP:20 (ftp 資料)、21 (ftp 控制)

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

使用 allowNetworking 參數

您可以在包含此 SWF 內容的 HTML 頁面中,設定其中 <object><embed> 標籤內的 allowNetworking 參數,控制 SWF 檔對網路功能的存取權。

allowNetworking 的可能值如下:

  • "all" (預設值):此 SWF 允許的所有網路 API。

  • "internal":此 SWF 檔可能不會呼叫瀏覽器瀏覽或瀏覽器互動 API (如本節下文中所示),但是可以呼叫其它任何的網路 API。

  • "none":此 SWF 檔不可以呼叫瀏覽器瀏覽或瀏覽器互動 API (如本節下文中所示),而且也不可以使用任何 SWF-to-SWF 通訊 API (亦如本節下文中所示)。

allowNetworking 參數是主要是針對在 SWF 檔與包圍的 HTML 頁面是來自不同網域時使用而設計的。不建議在所載入 SWF 檔與其包圍的 HTML 頁面位於相同網域時,使用 "internal""none" 等值,因為您不能確定 SWF 檔永遠都是使用您想用的 HTML 頁面載入。未受信任的各方可以從您的網域載入 SWF 檔而不加上包圍的 HTML,此時 allowNetworking 限制將無法依您原意運作。

呼叫禁止使用的 API 會擲出 SecurityError 例外。

加入 allowNetworking 參數,並在包含 SWF 檔參考的 HTML 頁面的 <object><embed> 標籤中設定其值,如下列範例所示:

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

HTML 也可以使用指令碼來產生內嵌 SWF 的標籤。您必須變更程式碼,在程式碼中插入適當的 allowNetworking 設定。Adobe Flash Professional 和 Adobe Flash Builder 產生的 HTML 頁面使用 AC_FL_RunContent() 功能,內嵌 SWF 檔的參考。 將 allowNetworking 參數設定新增至指令碼,如下所示:

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

allowNetworking 設定成 "internal" 時,下列 API 將會停用:

navigateToURL()fscommand()ExternalInterface.call()

除了前述清單上的 API 以外,當 allowNetworking 設定為 "none" 時,也會停止使用下列 API:

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

即使選定的 allowNetworking 設定允許 SWF 檔使用網路 API,仍可能因安全執行程序限制而有其它限制 (請參閱安全執行程序)。

allowNetworking 設定成 "none" 時,您無法在 TextField 物件之 htmlText 屬性的 <img> 標籤中參考外部媒體 (會擲回 SecurityError 例外)。

allowNetworking 設定成 "none" 時,從匯入的共享元件庫加入 Flash Professional 中 (不是 ActionScript) 的元件會在執行階段遭到封鎖。