OpenPeak Flash应用程序XMLSocket安全问题

时间:2010-03-12 18:30:50

标签: java flash actionscript-3 security

我们正在尝试为OpenPeak创建一个应用。 Flash应用程序将充当另一个域上另一台计算机上的Java服务器的客户端。

Flash应用程序客户端通过XMLSocket连接。 Java Server使用ServerSocket接收请求并发回消息。

为了信任服务器,Flash客户端需要一个套接字主策略文件来告诉它服务器来自一个值得信赖的域。根据Adobe上的一篇文章,当连接成功时,Flash客户端会自动在端口843上请求跨域策略或套接字主策略文件。

尽管如此,即使我们根据我们阅读的教程和建议实现它,Flash客户端仍然会抛出以下安全错误:

  

SecurityErrorEvent   type =“securityError”bubbles = false   cancelable = false eventPhase = 2   text =“错误#2048”

我们在测试过程中尝试过logging the policy file request,看看是否有对端口843的调用。没有。

有趣的是,即使没有策略文件,Flash客户端仍然可以成功地将第一条数据消息发送到服务器。只是当服务器尝试发回一个回复时,整个事情会在显示上面的安全错误之前挂起大约10秒。

有任何想法/建议吗?

1 个答案:

答案 0 :(得分:0)

为了让Flash访问另一个域,您需要一个crossdomain.xml文件。对于这个特定需求,您可能需要指定一个自定义URL。以下是您需要执行此操作的代码:

flash.system.Security.loadPolicyFile("{Url to my crossdomain.xml file on the SSL virtual root}");

这是一个示例文件,它禁用了对使用此文件的域的Flash“同源策略”保护。强烈建议限制对特定域的访问,但对于某些应用程序来说并非总是如此。

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*.*" secure="false" />
</cross-domain-policy>

要调试这个,我会使用TamperData来确保flash实际上正在下载crossdomain.xml文件。如果您需要调试rtmp或其他非http协议,那么您将不得不使用Wireshark。