做页游的同学都知道,Flash有安全沙箱问题。就是在Flash发起Socket链接时,会向服务端获取安全策略,如果得不到服务端返回的策略或策略不允许的情况,Flash将无法正常工作并向你抛出一个安全沙箱异常。
什么是Flash安全沙箱?
Flash安全沙箱是Flash使用Socket的一种安全策略,为避免任意Flash与目标服务器建立Socket链接,以授权端口,域名方式限定连接。
Flash如何获取Socket策略?
Flash发起Socket链接请求的时,会先连接服务器端的843端口来请求Socket策略。
当服务器没有开启843端口的时候(3秒超时),Flash会检查发起请求的flash程序中有没有使用Security.loadPolicyFile来加载Socket策略,如果还是没有就会看这个发起请求的连接的目标端口有没有Socket策略。
如果都没有,那么Flash将触发连接失败的Socket事件,即SecurityErrorEvent.SECURITY_ERROR。
请求信息(暗号)
Flash发起Socket连接请求会向服务端发23字节的字符数据:
<policy-file-request/>\0
注意:最后的\0,为什么会有这个\0请自行研究那个年代的字符串编码
对服务器来说请求策略是额外的链接
服务器处理响应时,不管策略是由843还是目标端口发送的,发完记得主动断开,不然Flash依然会傻傻的等3秒
Socket策略文件的格式
1、简单的Socket策略,不做任何限制:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="*"/>
</cross-domain-policy>
2、要限制某个域名或者IP:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.noark.xyz" />
<allow-access-from domain="192.168.0.92" />
</cross-domain-policy>
3、限制端口:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="12580" />
<allow-access-from domain="*.noark.xyz" to-ports="10010,10086" />
<allow-access-from domain="*.noark.xyz" to-ports="10010-10086" />
<allow-access-from domain="www.noark.xyz" to-ports="10000,10010-10086" />
</cross-domain-policy>
服务器响应时也要记得那个\0
安全沙箱服务正常运行时,还有异常建议先查看一下防火墙的配置,太多兄弟被坑了
跨域请求时的安全策略文件
除了Socket的策略还要说一下跨域请求时的安全策略文件,crossdomain.xml
位于A域中的SWF文件要访问B域的文件时,SWF首先会检查B域服务器目录下是否有crossdomain.xml文件,如果没有,则访问不成功;
若crossdomain.xml文件存在,且里边设置了允许A域访问,那么通信正常。
一个通用的跨域文件:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
很多时候,我们都直接使用了无限制的配置文件,能用就不管了,其实这是一个很不好的习惯,你的一个无意将会导致严重的安全隐患,会被有心之人利用
转载请注明原地址:
http://blog.noark.xyz/article/2013/4/1/flash安全沙箱问题/