【问题标题】:Flash Socket Policy - Policy is served, but client aborts connection to socketFlash 套接字策略 - 提供策略,但客户端中止与套接字的连接
【发布时间】:2011-06-08 02:45:14
【问题描述】:

我在端口 2400 上设置了一个服务。当我从 Flash 本身运行 Flash 客户端时,它运行良好,因为它绕过了安全策略。

当我尝试通过在我的桌面或浏览器上运行 SWF 进行连接时,我看到了这样的交换:

00000000  3c 70 6f 6c 69 63 79 2d  66 69 6c 65 2d 72 65 71 <policy- file-req
00000010  75 65 73 74 2f 3e 00                             uest/>.

00000000  3c 3f 78 6d 6c 20 76 65  72 73 69 6f 6e 3d 22 31 <?xml ve rsion="1
00000010  2e 30 22 3f 3e 3c 21 44  4f 43 54 59 50 45 20 63 .0"?><!D OCTYPE c
00000020  72 6f 73 73 2d 64 6f 6d  61 69 6e 2d 70 6f 6c 69 ross-dom ain-poli
00000030  63 79 20 53 59 53 54 45  4d 20 22 68 74 74 70 3a cy SYSTE M "http:
00000040  2f 2f 77 77 77 2e 61 64  6f 62 65 2e 63 6f 6d 2f //www.ad obe.com/
00000050  78 6d 6c 2f 64 74 64 73  2f 63 72 6f 73 73 2d 64 xml/dtds /cross-d
00000060  6f 6d 61 69 6e 2d 70 6f  6c 69 63 79 2e 64 74 64 omain-po licy.dtd
00000070  22 3e 20 3c 63 72 6f 73  73 2d 64 6f 6d 61 69 6e "> <cros s-domain
00000080  2d 70 6f 6c 69 63 79 3e  20 3c 73 69 74 65 2d 63 -policy>  <site-c
00000090  6f 6e 74 72 6f 6c 20 70  65 72 6d 69 74 74 65 64 ontrol p ermitted
000000A0  2d 63 72 6f 73 73 2d 64  6f 6d 61 69 6e 2d 70 6f -cross-d omain-po
000000B0  6c 69 63 69 65 73 3d 22  6d 61 73 74 65 72 2d 6f licies=" master-o
000000C0  6e 6c 79 22 2f 3e 20 3c  61 6c 6c 6f 77 2d 61 63 nly"/> < allow-ac
000000D0  63 65 73 73 2d 66 72 6f  6d 20 64 6f 6d 61 69 6e cess-fro m domain
000000E0  3d 22 2a 22 20 74 6f 2d  70 6f 72 74 73 3d 22 2a ="*" to- ports="*
000000F0  22 20 2f 3e 3c 2f 63 72  6f 73 73 2d 64 6f 6d 61 " /></cr oss-doma
00000100  69 6e 2d 70 6f 6c 69 63  79 3e 00                in-polic y>.

所以你可以看到我在响应中正确地包含了空终止符。

在交换所服务的策略请求和策略文件后,会发生以下情况:

  • 客户端向服务器端口 2400 发送 SYN
  • 服务器响应 SYN、ACK
  • 客户端发送 ACK
  • 客户端发送 FIN、ACK
  • 服务器响应 ACK
  • 客户端发送 RST、ACK

我假设这是客户端连接(步骤 1-3)然后中止(步骤 4-6)。 Flash 提供此错误:

错误:错误 #2048:违反安全沙箱:file:///C|/Projects/rbrnascar/trunk/Development/Websites/flash/SocialMap.swf 无法从 robpaveza.net:2400 加载数据。 在 com.redbull.model::SocialMapModel/onSecurityError() 在 flash.events::EventDispatcher/dispatchEventFunction() 在 flash.events::EventDispatcher/dispatchEvent() 在 flash.net::Socket/onTimeout() 在 flash.utils::Timer/_timerDispatch() 在 flash.utils::Timer/tick()

我查看了以下页面,似乎表达了类似的麻烦但没有解决方案

有人知道吗?

【问题讨论】:

  • 在策略调试器日志中找到此内容:OK:已接受策略文件:xmlsocket://:843 OK:在 xmlsocket://:2400 处请求资源由于 xmlsocket://:843 的策略文件,允许来自 file:///C|/.swf 的请求者

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


【解决方案1】:

确保客户端的超时设置为毫秒,而不是秒。

【讨论】:

  • 当客户端套接字的超时时间过低时,Flash 会呈现策略错误的有趣错误。
【解决方案2】:

我有。在策略文件结束后发送空字符 \0。

我会这样做(用 C# 写入 StreamWriter)

 mwriter.WriteLine(XMLString+"\0");

【讨论】:

  • 我做到了。您可以在十六进制转储的末尾看到空字节 (00)。
猜你喜欢
  • 2011-12-21
  • 2011-07-23
  • 2014-02-16
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
相关资源
最近更新 更多