2010-01-01 145 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客户端的本地(非托管)版本。 很奇怪。