日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

flash的Socket通讯沙箱和安全策略问题

發布時間:2024/4/14 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flash的Socket通讯沙箱和安全策略问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

一、沙箱和安全策略問題
??? 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即可。

轉載于:https://my.oschina.net/leoson/blog/106375

總結

以上是生活随笔為你收集整理的flash的Socket通讯沙箱和安全策略问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。