套接字在 Flash Player 中不起作用

如果 Adobe Flash Player 的版本高于 9.0.115.0,则以下任意配置可能无法按预期工作:

  • SWF 文件尝试将套接字或 XMLSocket 连接回其自身的主机,而不执行 loadPolicyFile 调用来检索套接字策略文件。
  • SWF 文件尝试将套接字或 XMLSocket 连接回其自身的主机,并且加载未在允许的域中列出其自身域的策略文件。
  • SWF 文件尝试将套接字或 XMLSocket 连接回任意主机,并且使用一个 HTTP 策略文件授予权限。

请参阅诊断部分,以获取有关确定此更改是否影响您的站点的说明。

原因

版本高于 9.0.115.0 的 Flash Player 会更改套接字连接的权限要求,并且 HTTP 策略文件不再为套接字连接提供授权。Flash Player 具有两种类型的策略文件:

  • HTTP 策略文件,即服务器上的 crossdomain.xml 文件,用来定义来自其他域的 SWF 文件能否加载该服务器的内容。
  • 套接字策略文件,用来定义 Flash Player 使用套接字或 XMLSocket 连接时可连接到的端口。

在早期版本中,如果满足以下条件,则连接到大于 1024 的端口时不需要套接字策略文件(即由套接字部署的策略文件):

  • 为 SWF 文件提供服务的域与套接字连接的域相同,并且
  • 提供服务的域托管了 crossdomain.xml 文件。

这种早期的配置会给客户带来风险,因为越来越多的关键服务是从大于 1024 的端口提供的。此更改还有助于降低使用 Flash Player 套接字进行 DNS 重新绑定攻击来访问受害者主机的可能性。为了缓解此问题,Flash Player 现在要求所有套接字连接都具有套接字策略文件,而不考虑目标端口以及是否存在 crossdomain.xml 文件。端口 843 上的套接字策略文件现在有一个固定的主位置。此端口上的策略文件将能够定义元策略,元策略又可定义是否在主机上允许其他套接字策略文件。默认情况下,所有套接字策略文件均得到认可。

如果您的 SWF 文件以前由于存在 crossdomain.xml 文件而可以通过大于 1024 的端口连接到其原始主机,那么您现在必须具有一个套接字策略文件。可从主套接字策略端口 (843),或从套接字连接所使用的同一端口为套接字策略文件提供服务。

诊断

使用以下信息确定此更改是否影响您的站点。Flash Player 9.0.115.0 引入了一项新的策略文件日志记录功能。策略文件日志显示了与策略文件相关的每个事件的消息:策略文件检索尝试,策略文件处理成功和失败情况,以及由策略文件决定的请求结果。您可以在 Flash Player 9 和 10 中的策略文件更改的附录 B 中找到策略文件日志消息的完整参考。

要使用策略文件日志,请执行以下操作:

  1. 安装 Flash Player 9.0.115.0 或更高版本的调试版。您可以使用以下任意类型的 Flash Player:ActiveX、插件或独立版。您可以从 Flash Player 支持中心下载获取 Flash Player 调试版。
  2. 确定 mm.cfg 配置文件的位置。这是一个常规调试配置文件,Flash Player 调试版在启动时会读取该文件。mm.cfg 文件位于您的主目录中。例如:

    • Windows:C:\Documents and Settings\<用户名>
    • Windows Vista:C:\用户\<用户名>
    • Mac OS 和 Linux:/home/<用户名>
  3. 如果 mm.cfg 不存在,请创建该文件,然后添加以下一行或两行:

    • PolicyFileLog=1 # 启用策略文件日志记录
    • PolicyFileLogAppend=1 # 可选;在启动时不清除日志
    • 如果未启用 PolicyFileLogAppend,则每个新的根级别 SWF 将清除日志文件。如果启用 policyfilelogappendpolicyfilelogappend<>,则日志文件以前的内容将始终会被保留,并且日志文件最终将会增大。

    如果在测试期间加载了许多不同的根级别 SWF 文件,您将可能需要启用 PolicyFileLogAppend。但是,如果启用 PolicyFileLogAppend,您可能需要手动重命名或偶尔删除日志文件,否则它将变得非常大,并且很难确定旧输出结束和新输出开始的位置。

  4. 查找策略文件日志 policyfiles.txt 将被写入的位置。该文件不一定存在;Flash Player 将在下次运行 SWF 文件时创建它。您可以在以下位置找到 policyfiles.txt:
    • Windows:C:\Documents and Settings\<用户名>\Application Data\Macromedia\Flash Player\Logs
    • Windows Vista:C:\用户\<用户名>[AppData]\Roaming\Macromedia\Flash Player\Logs
    • Mac OS:/用户/<用户名>/资源库/Preferences/Macromedia/Flash Player/Logs(程序将日志文件写入 Preferences 目录不太常见,但事实确实如此)
    • Linux:/home/<用户名>/.macromedia/Flash_Player/Logs
  5. 要检查您的设置,请在 Flash Player 中运行任意 SWF 文件,然后关闭 Flash Player(或浏览器)。

  6. 现在,您会在 Logs 目录中看到 policyfiles.txt。请验证该文件是否具有最近的修改时间。打开该文件,并验证是否至少显示了一条消息(“已加载根级别 SWF”)。如果是这样,则表明可以正常进行策略文件日志记录。

  7. 访问您需要测试的 SWF 内容。通过任何将导致内容遇到策略文件的方案运行该内容。完成后关闭 Flash Player。
  8. 查阅 policyfiles.txt 以了解策略文件在测试运行期间发生了什么情况。如果您不明白所看到的消息,请参阅 Flash Player 9 和 10 中的策略文件更改

  9. 如果您在 policyfiles.txt 中找到需要保留以供将来参考的有用信息,请将日志文件重命名为一个不同于 policyfiles.txt 的名称,或者将其移至其他目录,这样 Flash Player 在重新运行时便不会覆盖该日志。

解决方案:创建一个允许连接到主机的套接字策略文件

要解决此问题,您必须创建一个允许连接到主机的套接字策略文件。可从端口 843 上的套接字主策略位置,或从套接字连接的目标端口为此策略文件提供服务。套接字策略文件必须包含所有允许连接到套接字的域,其中包括其自身。如果套接字策略文件从主策略文件位置进行托管,请包含允许对套接字策略文件进行定位的元策略。

套接字策略文件的更改在 Flash Player 9 和 10 中的策略文件更改中进行了详细说明。(日志消息在附录 B 中进行了详细说明。)

其他参考

有关 Flash Player 安全性信息,请访问 Flash Player 安全页面

跨域套接字策略文件中的更改也在 Flash Player 9 和 10 中的策略文件更改中进行了详细说明。

本产品经 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License 许可  Twitter™ 与 Facebook 中的内容不在 Creative Commons 的条款约束之下。

法律声明   |   在线隐私策略