flash和策略文件

最近的项目涉及到flash通过socket和服务器连接,刚接触这方面的内容,遇到了flash通信时安全策略的问题,这里记录下,有遇到相同问题的同学可以参考下。

HTML中的flash和服务器链接最初报错:[SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"]。抓包:

flash有发请求但服务器端业务接口中并没有收到请求,抓包可以看到,flash先请求了843接口,但没有成功,重试了一次后,请求了80端口,三次握手之后,发送了一段数据: <policy-file-request/>, 同时在as文件中触发了SecurityErrorEvent.SECURITY_ERROR 事件,通过排查发现是flash要请求安全策略文件。

当封装在页面的flash发起socket通信请求的时候会先寻找服务器端的843端口,获取Crossdomain.xml文件,当服务器没有开启843的时候,flashPlayer会检查发起请求的swf文件中中有没有使用Security.loadPolicyFile来加载策略文件Crossdomain.xml,如果还是没有就会看这个发起请求的swf要连接的目标端口有没有策略文件。如果都没有那么连接失败,返回如上的出错提示

由于测试服务器无法监听843端口,我们想通过监听8080端口来发送策略文件,操作方法是在socket.connect(ip, port)之前调用SWF Security.loadPolicyFile("xmlsocket://server.com:8080");,再试还是相同的错误:

8080端口返回了策略文件但是flash仍然请求了80端口获取获取策略文件,本来是按照文档操作的,带着疑问看了as的文档

as文档描述如下:

默认情况下禁止访问套接字和 XML 套接字连接,即使所要连接的套接字与 SWF 文件位于同一个域中也是如此。可以从下列 任意位置提供套接字策略文件,从而允许套接字级别访问: ? 端口 843 (主策略文件的位置) ? 与主套接字连接相同的端口 ? 主套接字连接端口之外的端口 默认情况下, Flash Player 在端口 843 和主套接字连接所在的端口上查找套接字策略文件。如果要从其它端口提供套接字策略文件, SWF 文件必须调用 Security.loadPolicyFile()。 套接字策略文件具有与 URL 策略文件相同的语法,只是前者还必须指定要对哪些端口授予访问权限。如果套接字策略文件来自低于 1024 的端口号,则它可以对任何端口授予访问权限;如果策略文件来自 1024 或更高的端口,则它只能对 1024 端口和更高的端口授予访问权限。允许的端口在 标记中的 to-ports 属性中指定。单个端口号、端口范围和通配符都是允许值。

也就是我们用了8080端口提供的策略文件并不能控制80端口的访问权限。

所以必须开启843端口,或者还是从8080端口获取侧略文件, 但要将主业务的端口改成大于1024。

参考: [ActionScript 3] Flash Socket通信的安全策略问题 843端口(转载) ADOBE? ACTIONSCRIPT? 3.0

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏jouypub

Git管理多个远程分支

首先Git不能单独设置pull和push的源,也就是说pull和push的只能保持一致!

1523
来自专栏安恒信息

CPU漏洞检测工具使用指南

检测工具 Windows下可以使用微软的PowerShell 脚本(SpeculationControl)或: SpecuCheck https://githu...

28710
来自专栏雨过天晴

原 使用 PHP-CS-Fixer 自动规

1923
来自专栏安恒网络空间安全讲武堂

翻译 | Linux利用动态链接共享对象库提权

Linux利用动态链接共享对象库提权 RPATH和弱文件权限会导致系统的损害。Linux应用程序可以利用动态链接的共享对象库(我们从现在开始称它们为共享库)来提...

2105
来自专栏一个默默无闻的工程师的日常

Trystack创建实例并通过ssh远程登录虚拟机

1833
来自专栏androidBlog

Git 配置别名 —— 让命令变得更简单

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/de...

861
来自专栏木制robot技术杂谈

懒人神器 autoenv

前言 每次去不同的项目下运行程序都要更改相对应的 Python 环境,那么有什么办法可以省去这繁琐的一步吗?答案肯定是有的,Kenneth Reitz 已经为我...

3656
来自专栏北京马哥教育

nginx 总结

1. Nginx无法启动解决方法 在查看到logs中报了如下错误时: 0.0.0.0:80 failed (10013: An attempt was made...

3809
来自专栏JetpropelledSnake

Python Web学习笔记之Cookie,Session,Token区别

2067
来自专栏北京马哥教育

Gitlab CE 8.1.3 安装手册(Debian/Ubuntu)

安装概述 Gitlab的安装过程主要包括以下组件的配置: 安装软件包及解决依赖项 Ruby环境 Go 系统用户 数据库(Mysql/Postgresql) Re...

2875

扫码关注云+社区