【问题标题】:Security Sandbox Violation, can't connect to Server via Socket安全沙箱违规,无法通过 Socket 连接到服务器
【发布时间】:2012-03-19 22:11:35
【问题描述】:

在我开始之前,我应该声明我已经阅读了所有内容,我关注了thisthisthis(以及更多...),但我仍然无法通过互联网上的 Socket 连接到我们正在运行的服务器.

这是我在 AS3 中尝试的:

        var host :String = "192.168.2.11";
        Security.allowDomain(host);
        Security.allowInsecureDomain(host);
        Security.loadPolicyFile("xmlsocket://" + host + ":" +  "843");

        // TTS server socket
        _socket = new Socket();
        _socket.addEventListener(Event.CLOSE, handleClose);
        _socket.addEventListener(IOErrorEvent.IO_ERROR, handleError);
        _socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleSecError);
        _socket.addEventListener(ProgressEvent.SOCKET_DATA, handleIncomingData);
        _socket.addEventListener(Event.CONNECT, handleConnect);
        _socket.connect(host, 1337);

如您所见,主机是一个本地地址,但只要我在这个本地网络中,这无关紧要。我是,因为这在我的 IDE (FD4) 中确实有效。 此外,该 swf 与其尝试连接的应用程序位于同一台服务器上,但位于另一个端口上。

服务器发送的策略文件(我们从 843 和 1337 端口都试过了)如下:

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

我们可以从服务器的日志输出中看到,这确实是发送到连接套接字的。在 xml 数据之后当然会发送一个空字节。之后,服务器关闭连接。但是,Flash 似乎不喜欢它,因为大约 3 秒后仍然出现“错误 #2048”。

我们真的没有想法......

【问题讨论】:

  • 端口 843 保留用于主策略,而不是使用您正在连接的端口 1337 并在您正在连接的套接字上发送文件。摆脱用于 https 连接的 Security.allowInsecureDomain 行。以及服务器端是什么语言。
  • 这是我使用的策略(添加了一些额外的斜杠以便格式化)
  • 嘿,谢谢,我们最终实现了主策略文件。问题是服务器发回的 xml 不包含“”标签。为了回答您的问题,我们在服务器端使用 C/C++。

标签: actionscript-3 flash security sockets cross-domain


【解决方案1】:

我们设法通过添加另一个标签使其工作:

<site-control permitted-cross-domain-policies="master-only"/>

为了让它工作,这个标签似乎是必要的。无论我们尝试哪个端口,如果没有那个标签,我们都无法让它工作。

所以在我们的例子中完整的 xml 现在看起来像这样(当然很容易修改以适应任何情况):

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
   <site-control permitted-cross-domain-policies="master-only"/>
   <allow-access-from domain="*" to-ports="*"/>
</cross-domain-policy>

这行没有包含在Adobe's own example (!!) 中真的很遗憾。我的意思是,它包含在示例文件中,但不在文章中。我不想知道有多少人因此而被困在这个阶段......

【讨论】:

  • 通过这种方式,您将向您的 SWF 文件开放所有端口和所有域。不是很安全。
  • 这是我们公司的测试,仅限本地网络。在这种情况下,安全性真的不重要;)但是,在任何生产版本中,限制域和端口当然是强制性的。
猜你喜欢
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多