2010-01-01 49 views
1

[編輯] 此問題最初被描述爲我在使用Perl的套接字時遇到問題,但現在我已經轉向了這顯然是Flash安全性的地方。但是,我仍然堅持。閃光燈未通過開放式插座連接,安全問題

我有一個Flash客戶端,它試圖連接到它所在的主機上的一個開放套接字。

我能夠從Flash IDE內成功連接,並且當我在我的機器上本地運行swf電影時,在授予安全許可並將其連接到白名單之後。但是,當我通過瀏覽器(http://mydomain/mymovie.swf)調用電影時,它無法連接。

套接字報告發出連接嘗試但立即斷開連接。

我有一個跨域策略文件,如下所示:在主機的根目錄中。

<?xml version="1.0"?> 
<cross-domain-policy> 
    <allow-access-from domain="*" to-ports="10005"/> 
</cross-domain-policy> 

(是的,Socket正在偵聽該端口)。

Flash影片我有一條線,看起來像這樣:

System.security.loadPolicyFile("XMLSocket://myDomain.com:80"); 

而且我想也許這就是問題的所在,但對如何使用此方法的文檔並不完全清楚。

我在Flash CS3中

所有的想法都被讚賞。

+0

你能給我們一些真實的代碼嗎? – 2010-01-01 13:58:50

+0

隨機想法:1.您是否嘗試使用localhost/127.0.0.1訪問策略文件? 2.您是否始終使用相同的域名(www.domain.com和domain.com之間沒有切換)? – 2010-01-01 19:47:10

+0

1)我有,作爲最後的手段嘗試localhost,但它並沒有(也不應該)工作,因爲當通過瀏覽器訪問,閃光燈在客戶端上運行,需要知道哪個外部域去尋找關於...的政策文件,至少我認爲它是有效的(同樣,我可能完全錯誤)。 2)是的...我沒有在任何情況下使用www。 – 2010-01-01 19:56:09

回答

2

因此,解決方案似乎是套接字服務器本身需要將crossdomain xml傳遞給客戶端。

Flash發送一個如下所示的字符串: <policy-file-request/>連接後。 如果您以此迴應

<?xml version="1.0"?> 
<cross-domain-policy> 
    <allow-access-from domain="*" to-ports="*"/> 
</cross-domain-policy> 

它接受連接。

最後一個剩餘的非工作元素是當客戶端關閉時,它拒絕重新連接,直到服務器腳本重新啓動,即使服務器腳本似乎願意重新使用該套接字並且正在接收並在隨後的連接請求中發送相同的消息。此問題似乎也不會影響swf客戶端的本地(非託管)版本。 很奇怪。