Flash Player 中的通訊端無作用

在 Adobe Flash Player 9.0.115.0 之後的版本中,下列其中一項設定可能無法如預期運作:

  • SWF 檔案嘗試將通訊端或 XMLSocket 連線連回其主機,但未執行 loadPolicyFile 呼叫以擷取通訊端原則檔案。
  • SWF 檔案嘗試將通訊端或 XMLSocket 連線連回其主機,並在允許的網域中載入未列出其本身網域的原則檔案。
  • SWF 檔案嘗試將通訊端或 XMLSocket 連線連回任一主機,且 HTTP 原則檔案授予權限。

請參閱診斷一節,以取得如何確定此項變更是否會影響網站的說明。

原因

Flash Player 9.0.115.0 之後的版本變更了通訊端連線的權限要求,且 HTTP 原則檔案不再進行通訊端連線授權。Flash Player 的原則檔案有兩種類型:

  • HTTP 原則檔案,此為伺服器上的 crossdomain.xml 檔案,負責定義其他網域的 SWF 檔案是否可載入該伺服器的內容。
  • 通訊端原則檔案,負責定義 Flash Player 可透過通訊端或 XMLSocket 連線來連線的連接埠。

在較早版本中,通訊端原則檔案是透過通訊端來部署的原則檔案,如果

  • 提供 SWF 檔案的網域與通訊端連線的網域相同,且
  • 提供服務的網域已裝載 crossdomain.xml 檔案,則不需要使用通訊端原則檔案來連線到大於 1024 的連接埠。

由於大於 1024 的連接埠提供的重要服務日益增加,這種較舊的組態便會對客戶帶來風險。此變更也有助於降低 DNS 重新繫結攻擊的可能性,因為這種攻擊會利用 Flash Player 通訊端進入受害主機。為了減少這類問題,現在起,不論目的地連接埠為何以及是否存在 crossdomain.xml 檔案,Flash Player 都會要求所有通訊端連線使用通訊端原則檔案。現在 843 號連接埠上會有通訊端原則檔案的固定主位置。此連接埠上的原則檔案將能定義中繼原則,藉以定義是否允許在主機上使用其他通訊端原則檔案。依預設,系統會認可所有通訊端原則檔案。

若先前您的 SWF 檔案由於 crossdomain.xml 檔案而得以透過大於 1024 的連接埠連線到其原始主機,現在必須具備通訊端原則檔案。從主通訊端原則連接埠 (843) 或從與通訊端連線相同的連接埠皆可取得通訊端原則檔案。

診斷

請利用以下資訊判斷此變更是否會影響您的網站。Flash Player 9.0.115.0 導入了一項名為原則檔案記錄的新功能。原則檔案記錄會顯示有關原則檔案每起事件的訊息: 嘗試擷取原則檔案、成功或無法處理原則檔案,以及是否允許依循原則檔案的請求。您可以在 Flash Player 9 與 10 的原則檔案變更的附錄 B 中,找到原則檔案記錄訊息的完整參考資料。

使用原則檔案記錄:

  1. 安裝 Flash Player 9.0.115.0 或更新版本的偵錯版本。您可以使用任何類型的 Flash Player: ActiveX、增效模組或獨立版。您可以從 Flash Player 支援中心下載取得 Flash Player 的偵錯版本。
  2. 確定 mm.cfg 組態檔的位置。此為 Flash Player 偵錯版本啟動時所讀取的一般偵錯組態檔。mm.cfg 組態檔位於主目錄中。例如:

    • Windows: C:\Documents and Settings\[使用者名稱]
    • Windows Vista: C:\Users\[使用者名稱]
    • Mac OS 和 Linux: /home/[使用者名稱]
  3. 如果 mm.cfg 不存在,請自行建立,然後新增下列兩行指令其中一行 (或皆新增):

    • PolicyFileLog=1 # Enables policy file logging
    • PolicyFileLogAppend=1 # Optional; do not clear log at startup
    • 如果 PolicyFileLogAppend 未啟用,則每個根層級的新的 SWF 都會清除記錄檔。如果 policyfilelogappendpolicyfilelogappend<> 已啟用,則記錄檔的先前內容都會一律保留,並從結尾新增內容。

    如果多個根層級的不同 SWF 檔案會在測試過程中載入,您可能需要啟用 PolicyFileLogAppend。然而,如果啟用了 PolicyFileLogAppend,您便可能需要不時手動重新命名或刪除記錄檔,否則記錄檔內容將越來越龐大,導致難以判斷先前輸出內容的結尾和新輸出內容的開頭。

  4. 找到 policyfiles.txt (即原則檔案記錄) 將要寫入的位置。此檔案不一定存在,若不存在,Flash Player 會在下一次 SWF 檔案執行時建立。您可以在下列位置找到 policyfiles.txt:
    • Windows: C:\Documents and Settings\[使用者名稱]\Application Data\Macromedia\Flash Player\Logs
    • Windows Vista: C:\Users\[使用者名稱] [AppData]\Roaming\Macromedia\Flash Player\Logs
    • Mac OS: /Users/[使用者名稱]/Library/Preferences/Macromedia/Flash Player/Logs (一般來說,程式不會將記錄檔寫入此「Preferences」目錄,但事實上即為此情況)
    • Linux: /home/[使用者名稱]/.macromedia/Flash_Player/Logs
  5. 若要檢查設定,請在 Flash Player 中執行任一 SWF 檔案,然後關閉 Flash Player (或瀏覽器)。

  6. 現在您會在「Logs」目錄中看到 policyfiles.txt。確認此檔案有最近的修改時間。開啟檔案並確認至少出現一則訊息 (「根層級 SWF 已載入」)。若有,則原則檔案記錄正在運作中。

  7. 瀏覽您需要測試的 SWF 內容。讓內容在任何會使其遭遇原則檔案的情境中執行。測試結束後,關閉 Flash Player。
  8. 閱讀 policyfiles.txt 以瞭解有關測試執行期間原則檔案運作情況的資訊。如果有不清楚的訊息,請參閱 Flash Player 9 與 10 的原則檔案變更

  9. 如果 policyfiles.txt 包含有用資訊而須保存以供日後參考,請以非「policyfiles.txt」的名稱重新命名記錄檔,或將其移動到其他目錄,Flash Player 便不會在下次執行時覆寫記錄。

解決方法: 建立允許連線至主機的通訊端原則檔案

若要解決此問題,您必須建立允許連線至主機的通訊端原則檔案。您可以從 843 號連接埠上的通訊端主原則位置或通訊端連線的目的地連接埠取得此原則檔案。通訊端原則檔案必須包含所有允許連線到通訊端的網域,包括其本身。如果通訊端原則檔案是從主原則檔案位置託管,請納入中繼原則,以允許找出通訊端原則檔案。

通訊端原則檔案的變更在 Flash Player 9 與 10 的原則檔案變更中有更多詳細說明。(記錄訊息在附錄 B 中有更多詳細說明。)

進階參考資料

如需 Flash Player 的安全性資訊,請造訪 Flash Player 安全性頁面

跨網域和通訊端原則檔案的變更亦在 Flash Player 9 與 10 的原則檔案變更中有更多詳細說明。

此産品由 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License 授權  Creative Commons 條款未涵蓋 Twitter™ 與 Facebook 文章。

法律說明   |   線上隱私權政策