flex的Socket通訊沙箱和安全策略問題

作者:雪地咖啡屋 來源:雪地咖啡屋 更新時間:2010-12-25 20:08:37 點擊:

一、沙箱和安全策略問題
    1、此問題發生在連接時,準確地說是連接前,分別兩種情況:
        1.本地播放
       本地播放時,默認情況下Flash Player將不允許swf訪問任何網絡。
       訪問http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html,將swf加入到許可列表,即可解除限制。
      2.WEB發布
       發布在WEB上的swf, 將可能面臨跨域的問題。

    2、Flash中的通信方式有兩種:
    1.HTTP方式:如URLLoader等用于加載遠程swf、文件、圖像、音視頻流。
    2.Socket主要:如 XMLSocket,用于與遠程服務端建立長效連接。
    Flash Player6以上版本引入了安全策略文件,在進行正式的通信前,會檢查目標位置是否存在合法的安全策略,以防止不同域內的應用無限制任意互訪。
    HTTP方式下,Flash Player會檢查目標域根目錄下是否存在crossdomain.xml,如果有,則獲取并分析其內容(內容后述)以確定是否允許繼續訪問。
    Socket方式下,Flash Player獲取安全策略稍微復雜些,從9.0.115.0版起,標準步驟如下(以下描述以IE為標準,例外情況后述):
     1)首先向目標主機 843 端口發起連接,并發送一個字符串,內容為"<policy-file-request/>",并等待返回安全策略文件并分析。
     2)若1)失敗,則檢查AS代碼中是否使用了Security.loadPolicyFile("xmlsocket://主機:端口")方法加載安全策略文件,若有,則獲取并分析。
     3)若2)失敗,則向AS代碼中即將連接的 "目標主機:端口" 發起請求,過程同1)。
     4)若成功獲得安全策略文件并經分析認為允許建立連接,則繼續執行Connect()方法,此時方真正嘗試創建與目標主機的連接。

  3、解決方案
    HTTP 連接方式不用再說,只說說 Socket 方式。
    1) 在服務端寫一個程序,監聽843端口,當收到 "<policy-file-request/>" 時將恰當的策略內容(crossdomain.xml)發送回客戶端。
    2) 在AS中通過loadPolicyFile()加載策略文件,此處需注意使用xmlsocket://,而不是 http://。
    3) 在標準服務端口中,檢測到"<policy-file-request/>"時,返回策略內容。

  4、例外情況及測試結果
    經測試發現,在IE,Opera中,Flash Player會嚴格按上述步驟檢查安全策略。
    在 FireFox, Chrome中發起連接時,Flash Player并不會向服務端發送"<policy-file-request/>",而是直接連接成功。這應該是Flash Player不同實現版本的原因。

    5、數據傳輸中的問題
     在XMLSocket數據傳輸中,需要注意以下細節,否則會出來些莫名其妙的問題。
       1.結束符號
     XMLSocket接收到服務端下發的數據時,將連續放于接收緩沖區,直到接收到"\0"字節(字節內容為ASCII值0),才認為接收完成,并調用相應的onData或onXML事件。
     服務端若用Java編寫,并使用標準的String類族,則在發送數據結尾應手動加上"\0"。
     若用 C++ 編寫,由于C++中標準字符串類型便是以字節0作結束標記,故不必再加"\0"。
     * C++中需注意另一個問題,若自行進行了字符串處理,在決定字符串長度時,標準的strlen及String.Length()等返回的均是實際有效字符個數,最終向網絡發送時,總長度應加1字節,以容納結尾的字節0。
     * 此問題在發送安全策略內容時同樣存在,故需重視。

       2.中文問題
     默認情況下,不管從哪一端發向另一端的數據,若包含了中文字符,都會產生亂碼的現象,解決方法有二:
     1).在AS中加入"System.useCodepage=true;" 強制使用本地代碼集,此法最方便,但是在跨語種平臺上仍會出現亂碼。
     2).在代碼中自行編寫轉碼函數,此法復雜些,但通用性強。具體轉碼算法網上很多,主要是C++服務端需要,Java中使用JDK類轉換為UTF-8即可。

大乐透走势图2 福建快3第三位走势图 北京快3助手app 游戏的玩法说明 全天时时彩计划稳定版 山西11选5软件 什么股票配资 彩票开奖查询公告 安徽11选五历史开奖查询 c18070s股票指数投资策略课后答案 安徽快三开奖公告 极速时时彩 比分网 现货配资网 真正免费能赚钱的app 2018时时彩平台哪个好 成都股票开户 吉林快三分析大小一定中