FlexSocket安全沙箱冲突及解决方案

开发 后端
本文向大家简单介绍一下FlexSocket安全沙箱冲突及解决方案,这是FP被广为唾骂的特性之一,其设计糟糕至极。Adobe貌似认为9秒时间对用户来说很短。

本文和大家重点讨论一下FlexSocket安全沙箱冲突及解决方案,FlexSocket连接SocketServer时,javaSocket、c++Socket,抑或其它,首先会开一个Socket连接主机的843端口请求安全策略文件,这个时间为3秒;如果此步未能成功,则看开发者是否显式调用了Security.loadPolicyFileAPI。

FlexSocket安全沙箱冲突及解决方案

这是FP被广为唾骂的特性之一,其设计糟糕至极。Adobe貌似认为9秒时间对用户来说很短。

1,糟糕的设计可能使用户浪费9秒时间

FlexSocket连接SocketServer时,javaSocket、c++Socket,抑或其它,首先会开一个Socket连接主机的843端口请求安全策略文件,这个时间为3秒;如果此步未能成功,则看开发者是否显式调用了Security.loadPolicyFileAPI,如下

  1. Security.loadPolicyFile("xmlsocket://127.0.0.1:1843"); 

如有,则再次尝试从这个端口加载策略数据,又是3秒。如果此步又未能OK,则尝试从开发者定义的FlexSocket主机端口再次加载安全策略,此时会发送这样一个请求:

  1. <policy-file-request/> 

如果SocketServer没有处理这个请求,客户端将无法进一步完成FlexSocket连接。这个过程又是3秒。如果软件设计不当,客户端将浪费9秒的时间才能知道它有没有获得Server的连接许可,这张门票有点贵了。FP如能成功加载到安全策略数据,会把所用socket抛弃(即使从主机端口请求亦是如此),然后执行开发者的socket连接逻辑。

2,合理的方案,用java实现

在SocketServer端单开一个843端口,用于专门向客户端提供安全策略文件,java示例代码如下:

  1. packagesban.socketServer;  
  2.  
  3. importjava.io.BufferedInputStream;  
  4. importjava.io.BufferedReader;  
  5. importjava.io.File;  
  6. importjava.io.FileInputStream;  
  7. importjava.io.IOException;  
  8. importjava.io.InputStreamReader;  
  9. importjava.io.PrintWriter;  
  10. importjava.net.InetSocketAddress;  
  11. importjava.net.ServerSocket;  
  12. importjava.net.Socket;  
  13. importjava.net.SocketAddress;  
  14. importjava.net.URL;  
  15.  
  16. /**  
  17. *sbanpolicyserverforflex/flashsocket  
  18. *  
  19. *@authorsban<http://sban.biz/> 
  20. *  
  21. */  
  22. publicclassSbanSocketPolicyServer{  
  23.  publicSbanSocketPolicyServer(){  
  24.  
  25.  }  
  26.  
  27.  publicstaticStringreadFileAsString(Stringurl)  
  28.    throwsjava.io.IOException{  
  29.   byte[]buffer=newbyte[(int)newFile(url).length()];  
  30.   BufferedInputStreamf=newBufferedInputStream(  
  31.     newFileInputStream(url));  
  32.   f.read(buffer);  
  33.   f.close();  
  34.   returnnewString(buffer);  
  35.  }  
  36.  
  37.  publicstaticvoidmain(String[]args)throwsIOException{  
  38.   ServerSocketserver=newServerSocket();  
  39.   SocketAddressendpoint=newInetSocketAddress("127.0.0.1",843);  
  40.   server.bind(endpoint);  
  41.   Stringpath=SbanSocketPolicyServer.class.getResource("../../crossdomain.xml").getPath();  
  42.   System.out.println(path);  
  43.   Stringpolicy=readFileAsString(path);  
  44.  
  45.   while(true){  
  46.    System.out.println("waitforclient...");  
  47.    Socketsocket=server.accept();  
  48.  
  49.    BufferedReaderin=newBufferedReader(newInputStreamReader(  
  50.      socket.getInputStream()));  
  51.    PrintWriterout=newPrintWriter(socket.getOutputStream());  
  52.    Strings=in.readLine();  
  53.    System.out.println(s);  
  54.  
  55.    if(s.indexOf("policy-file-request")>-1){  
  56.     out.print(policy+'\0');  
  57.     out.flush();  
  58.     in.close();  
  59.     out.close();  
  60.     System.out.println("sendedpolicycontext.");  
  61.     socket.close();  
  62.    }  
  63.   }  
  64.  
  65.  }  
  66. }  
  67.  

而crossdomain.xml文件的示例代码为:

  1. <cross-domain-policy> 
  2. <site-controlpermitted-cross-domain-policiessite-controlpermitted-cross-domain-policies="all"/> 
  3. <allow-access-fromdomainallow-access-fromdomain="*"to-ports="*"/> 
  4. </cross-domain-policy> 

将crossdomain.xml文件与执行文件放置一起

3,你可以借用的jar执行文件

sban把上述java导出为jar可执行文件:

SbanSocketPolicyServer.zip5.8KB

在Windows下,确定已安装java环境,并已设定环境变量,在命令行窗口中执行如下命令:

java-jarSbanSocketPolicyServer.jar

说明:该java程序未经优化,仅作为教程示例,不建议在商业项目中使用。
 

【编辑推荐】

  1. 解析Flex安全沙箱五大解决方法
  2. Flex安全沙箱问题解决方法
  3. 技术前沿 看Flex客户端缓存技术如何使用
  4. 解析Flex全屏模式设置方法
  5. Flex内存泄露解决方法和内存释放优化原则

 

 

责任编辑:佚名 来源: csdn.net
相关推荐

2024-02-22 11:23:16

2010-12-21 17:39:59

2010-12-24 13:05:22

2020-04-20 09:37:41

移动边缘计算云计算安全

2014-09-25 13:14:53

2010-12-21 17:36:12

2011-01-21 09:50:31

2013-03-01 16:45:27

2012-09-24 14:51:39

2012-08-03 15:51:37

HillstoneNAT

2010-07-30 12:40:00

Flex跨域访问

2013-04-25 14:26:54

GridView

2024-09-12 15:43:46

C#代码后端

2018-01-11 21:32:45

机房漏电机房安全

2010-01-05 10:57:30

2018-06-25 10:43:40

机房漏电方案

2010-12-21 17:17:21

2009-07-29 09:43:15

银行网络无线接入

2011-06-21 09:01:02

2011-03-22 13:06:28

DNS
点赞
收藏

51CTO技术栈公众号