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

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

成都创新互联是一家专业提供丰镇企业网站建设,专注与网站设计、网站建设、HTML5建站、小程序制作等业务。10年已为丰镇众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。

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.  

如果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 
  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.  
  2.  
  3.  
  4.  

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

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

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

SbanSocketPolicyServer.zip5.8KB

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

java-jarSbanSocketPolicyServer.jar

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

本文标题:FlexSocket安全沙箱冲突及解决方案
文章地址:http://www.shufengxianlan.com/qtweb/news6/3006.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联