- 浏览: 309542 次
- 性别:
- 来自: 南昌
文章分类
最新评论
-
秋风扫落叶:
不错,学习了。shadow文件中记录的格式是什么?
/etc/passwd & /etc/shadow 详解 -
key232323:
重拾jstl——写得很好。我收藏下。
JSTL标签用法 -
zxl10059:
不错,非常简明扼要
Hibernate分页 -
Batmankwok:
很好,所见略同,
自定义组件MXML和as两种实现的方式和区别 -
Dxx23:
摘话回帖!
通过response对象的sendRedirec ...
response.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
首先先发泄一下我的高兴,超高兴超高兴... .... .. . .. . .. .
今天才找到了这篇好文章,很感谢作者
通过这篇文章,我完全解决了一个AS3 中使用Socket的安全问题.
按照这篇文章这样子做,不用看其他的文章,就解决了,而且很简单.
讲一下我的目标和遇到的问题以及解决的路径:
1、首先这是一个网站,通过点击一个按钮,然后发送命令到终端;(类似点对点的聊天)
2、然后我就做了一个类似私聊的功能,把这个功能的代码完全复制到我的项目里面的时候,就出现了这个错误【错误信息: Error #2044: 未处理的 SecurityErrorEvent:。 text=Error #2048: 安全沙箱冲突:http://web.a.com/online.swf 不能从 10.20.199.182:8000 加载数据】,于是就到网上找解决方案:
3、找到的解决方案都说有三种方式:843端口监听、在客户端代码中使用Security.loadPolicyFile("xmlsocket://22.20.192.149:1038");方法、还有一个我不记得了。然后我就试了第二种方法,就是在服务器端放crossdomain.xml文件(这个我在上一篇博客有写怎么放),试了好久,在昨天终于不报上面的SecurityErrorEvent这个错了,虽然不报错了,但是都连接不上,于是又去找资料;
4、实在没办法,有Debug一下,发现报了一个新的错【[SWF] /BrainpowerBlazeds/bin/BrainpowerBlazeds.swf - 1,309,421 bytes after decompression
警告: 等待 socket 策略文件时在 xmlsocket://10.20.192.149:843 上超时(3 秒钟)。这不会造成任何问题,但可访问 http://www.adobe.com/go/strict_policy_files_cn 以获得说明。】
5、根据这个错,才找到以下的这篇我转载过来的非常好的资料,才完全解决了。
总的来说:服务器端(java端)的主调程序我新建了两个ServerSocket:A和B。我用一个A监听843端口,如果发来<policy-file-request/>,我就调用一个线程Server843Thread(自定义的类)把策略文件(String)发送回去,接着把这个A关掉。这时候B还是打开的,所以当客户端发来<doopen-file-request/>(这个是客户端发来的我自定义的一个字符串),服务器判断发来的是<doopen-file-request/>而不是<policy-file-request/>,就调用另外一个线程ChatThread(专门处理发送过来的我自定义的信息的线程),就ok了。
注意:客户端连接服务端的时候不用管843端口,这是Adobe设置专门用来发送和接受安全策略文件的端口(据说Adobe准备申请该端口为专属端口),只要连接上面说的ServerSocket B中指定的端口即可(也就是除了843的另外一个,这里用的是9999端口),废话好多(希望能提供多一些说明让大家看懂),其实客户端连服务端的代码就是这样:socket.connect("localhost",9999);
说明一下:这是通过监听843端口发送安全策略文件(crossdomain.xml),用自定义端口9999进行自定义内容通信的例子。
本文转自:http://hi.baidu.com/fsnhf/blog/item/410c5a456e914f3787947356.html
解决AS3 Socket编程中最令人头疼的问题
--解决AS3 Socket安全问题
什么是最令人头疼的问题?也许大家会异口同声的说:“安全问题”,不错,不仅仅是AS3 的Socket,整个AS3语言中最令人头疼的问题也无非就是安全问题了。
很 多同行的兄弟在郁闷的时候就会骂Adobe。但是,骂归骂,问题终归是要解决的,Adobe做这样的限制肯定是有他的用意的,大家都知道,swf文件是很 容易被反编的,那么也就是说你的swf文件内部与服务器通信的方式及路径是很容易被别人发现的,如果你的服务器中没有任何访问限制,那么你的服务器很容易 被一些人攻破,这并不需要很高的水平,只要一直刷,你的服务器就完了。
兄弟,您骂够了吗?我们来解决问题吧?
用Java写完Socket服务器后,运行,一切正常,用Flex写全Socket客户端后,运行,一切正常,可是当把生成的swf文件拷到其它地方来运行就出错了,总是无法连接服务器,然后就开始抛securityError,下面我们看一下输出信息。
打 开Flash CS3,打开远程调试器,选择菜单如 Debug->Begin Remote Debug Session->ActionScript3.0(中文版选择菜单如:调试->开始远程调试会话->ActionScript3.0),下面我们打开客户端swf文件(记得此文件一定是调试版swf),则它会自动连接Flash CS3 的调试器,在Flash CS3中输出相关的调试信息。
可以看到输出信息如下:
------------------------------------
[SWF] C:\Users\Administrator\Desktop\MyClientFlash.swf - 1112717 bytes after decompression
警告: [strict] 将忽略 xmlsocket://localhost:9999 处的策略文件,因为出现语法错误。请访问 http://www.adobe.com/go/strict_policy_files_cn 以解决此问题。
*** 安全沙箱冲突 ***
到 localhost:9999 的连接已停止 - 不允许从 file:///C|/Users/Administrator/Desktop/MyClientFlash.swf 进行连接
错误: 拒绝请求位于 xmlsocket://localhost:9999 的资源(请求者从 file:///C|/Users/Administrator/Desktop/MyClientFlash.swf 发出请求),原因是缺乏策略文件权限。
------------------------------------
原因是没有在服务器的9999端口放置安全策略文件(我写的服务器用的是9999端口),那么好吧,我就在此处给客户端返回了一个安全策略文件信息,此文件格式如下:
<?xml version="1.0"?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="localhost" to-ports="9999,300-400" />
</cross-domain-policy>
上述示例中是允许来自localhost域的swf文件访问9999端口和300至400端口,你也可以用*来代替localhost以允许来自任何域的swf文件访问。
此时我将客户端文件请求的信息在Java中打印出来,看到的是一段包含<policy-file-request/>的字符串,当Java服务器接收到这个字符串时,立即返回安全策略文件字符串。
我想这样应该没什么问题了吧,可是当我再连接服务器时仍然无法连接,输出信息成了这样:
-------------------------------------
[SWF] C:\Users\Administrator\Desktop\MyClientFlash.swf - 1112717 bytes after decompression
警告: 等待 socket 策略文件时在 xmlsocket://localhost:9999 上超时(3 秒钟)。这不会造成任何问题,但可访问 http://www.adobe.com/go/strict_policy_files_cn 以获得说明。
*** 安全沙箱冲突 ***
到 localhost:9999 的连接已停止 - 不允许从 file:///C|/Users/Administrator/Desktop/MyClientFlash.swf 进行连接
错误: 拒绝请求位于 xmlsocket://localhost:9999 的资源(请求者从 file:///C|/Users/Administrator/Desktop/MyClientFlash.swf 发出请求),原因是缺乏策略文件权限。
-------------------------------------
这时我并不灰心,就按照它的说明去了http://www.adobe.com/go/strict_policy_files_cn这里查看说明了。
等我看到这个页面时,我真的郁闷了,上面全是乱说一通,根本不着边,全是一些没用的信息,亏Adobe想得出来提示我到这里看。
就 在我将要放弃解决这个问题的时候,我发现了另外一个现象,那就是当我刚开始连接服务器时,服务器端并没有打印出来客户端的请求信息 (<policy-file-request/>),而是在Flash CS3的调试器输出了超时错误之后,服务器端才打印出来这个请求信息。
这时我看到了一线希望,那就是服务器端确实出现了等待,这肯定是服务器端的程序问题。服务器端接收请求的处理代码片断如下:
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
if(br.readLine().indexOf("<policy-file-request/>")!=-1){
//开始返回授权文件信息
...
}
其中变量s是ServerSocket实例通过accept方法获得的Socket实例。
此时我开始怀疑是readLine方法的问题了,因为readLine方法是当程序读到\n或者\r时才会返回信息,所以肯定是此方法中出现了等待,因为起初客户端并没有传来换行符或者回车符。
于是我改变了读取字符串的方法,不再用readLine了,而取流中前22个字符,代码片断如下所示:
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
char[] ch=new char[22];
br.read(ch, 0, ch.length);
StringBuffer sb=new StringBuffer();
for(int i=0;i< ch.length;i++){
sb.append(ch[i]);
}
String st=sb.toString();
if(st.indexOf("<policy-file-request/>")!=-1){
//开始返回授权文件信息
...
}
当我再连接服务器时,果然不出我所料,成功连接服务器。
但是连接过程有点慢,貌似此过程也正好是3秒钟,莫非在连接此服务器之前已经进行了另外一次连接,而且是失败的。
查看Adobe官网的资料才明白,flashplayer会在连接指定的端口之前连接目标主机的843端口,如果3秒后得不到授权文件才再向指定的端口去请求授权文件,如果再经过3秒还得不到授权文件的话,则断开连接,抛出securityError。
那 意思就是说在连接我的服务器的9999端口之前还连接了我的服务器的843端口,并且在843端口等待了3秒,没有得到授权文件,之后开始向我指定的端口请求此授权文件。那好吧,既然你要了,我就给你吧,不给你的话你还再磨矶磨矶,于是我又在843端口开了一个ServerSocket,此处专门处理授权 文件的请求。
这时我再连接服务器,呵呵,特快专列(T843),立即就连接上了。
说明:貌似有很多客户机上的843端被禁用了,所以为了保险,需要在指定端口和843端都要能够处理授权文件的请求。
以下是示例程序及源文件下载:
http://remotedu.net/blog/attachments/month_0905/t2009549429.rar
发表评论
-
web.xml tomcat 和jetty 区别
2010-09-07 09:31 2189因为使用GWT,所以测试的时候是在jetty上运行的,但是最后 ... -
单元测试之实践四 Action的测试
2010-08-30 10:14 876Action的测试是比较辛苦的。因为它依赖与其他的环境(比如t ... -
单元测试之实践三 Service的测试
2010-08-30 10:13 995测试Service,因为Service依赖的Dao, 所以只需 ... -
单元测试之实践二,关于DAO的测试
2010-08-30 10:12 973前阵子发表过 我的第一个真正意义上的测试 。里面对于测试S ... -
Mockito特点
2010-08-30 10:02 11121. 只能使用jdk1.5以上,因为它的方便是用jdk1.5的 ... -
HttpUnit进行Web测试
2010-08-30 00:06 1715简介:HttpUnit是基于JUnit ... -
关于单元测试的一些看法
2010-08-28 14:26 929从参加工作以来,参加 ... -
Eclipse IDE下 Cactus + Jetty 对 Servlet 的测试
2010-08-28 13:09 1577在开发J2EE Web项目时,测试过程常涉及到代码与Web C ... -
用cactus,jetty实现对servlet类进行单元测试三(完)
2010-08-28 11:39 1134OK,可以开始写测试类了,代码为: pa ... -
用cactus,jetty实现对servlet类进行单元测试二
2010-08-28 11:37 1381按照官网的定义,我们就可以用MILY: 'Arial','sa ... -
用cactus,jetty实现对servlet类进行单元测试一
2010-08-28 11:35 1409JUnit是名声大燥了,想必只要学过JAVA的人都知道世上有个 ... -
相关测试工具下载
2010-08-26 17:21 1472相关测试工具下载 HP-Mercury软件测试工具下载,随时 ... -
单元测试实践小结
2010-08-26 16:40 635在系统开发过程种使用单元测试,会带来很多的的好处,最明显为: ... -
软件测试杂录
2010-08-26 14:41 1118比较杂,有空再整理一 ... -
J2EE单元测试
2010-08-26 11:06 1080一、测试原则 Java ... -
利用httpunit测试servlet
2010-08-26 10:33 2038传统的Java WEB应用中,核心技术莫过于Servlet类与 ... -
使用 EasyMock 更轻松地进行测试
2010-08-25 14:40 1016测试驱动开发是软件开发的重要部分。如果代码不进行测试,就是不可 ... -
Cactus工作原理
2010-08-24 09:52 1019Cactus 是Jakarta的子项目 ... -
Cactus实例讲解
2010-08-23 17:08 931Cactus简介 . 简介 Cactus实现了对JUni ... -
flex和java的通信
2010-08-17 15:35 739一、准备: 服务端:J ...
相关推荐
在AS3中,我们可以使用Socket类来实现这一功能。本示例主要探讨如何在Flash AS3中使用Socket类来发送和接收16进制数据。 首先,让我们理解16进制。16进制(Hexadecimal)是一种逢16进1的进位制,主要用于表示计算机...
本篇文章将探讨如何解决AS3中的安全沙箱问题,以便与Java后台进行顺畅的Socket通信。 首先,我们需要了解AS3的安全沙箱模型。AS3的沙箱分为三类:本地信任的沙箱(Local-with-Files)、网络沙箱(Network)和本地...
Socket安全策略是网络编程中的重要一环,尤其是在服务器与客户端通信时,确保数据的安全传输至关重要。本主题将深入探讨如何在服务器与AS3(ActionScript 3)客户端之间实施安全的Socket连接,以及如何通过C#实现...
本文将深入探讨AS3中的Socket通信方式,特别是利用XMLSocket进行网络交互的细节。 首先,XMLSocket是AS3中用于低级网络通信的类,它提供了双向、全双工的数据流,适合于游戏开发中的实时数据交换,如玩家状态同步、...
在AS与Java进行Socket通信时,通常会遇到的一个问题就是安全沙箱。安全沙箱是Flash Player为了防止恶意代码对用户的系统造成危害而实施的一种安全机制。它将Flash内容分为不同的沙箱,如本地沙箱、网络沙箱等,限制...
### Flash AS3 Socket编程基础知识详解 #### 一、引言 在现代互联网应用开发中,实时通信技术变得越来越重要。而Socket编程作为一种实现客户端与服务器之间实时数据交换的有效手段,在Flash开发领域同样占据着重要...
AS3中的SOCKET技术是ActionScript 3.0中用于实现网络通信的一种方式,它允许客户端(通常是Flash应用程序)与服务器之间进行低级的、基于TCP/IP协议的双向数据传输。在AS3中,有两种主要的类用于实现SOCKET通信:...
在AS3中,安全沙箱是一个关键概念,它是为了保护用户系统免受恶意代码侵害而设计的安全机制。安全沙箱主要有三种类型:本地沙箱、网络沙箱和本地_with_networking沙箱。 1. **本地沙箱**:当Flash内容从用户的本地...
### 关于AS3 Air ...需要注意的是,实际开发中可能还需要考虑到更多复杂的场景,如并发处理多个连接、安全性和性能优化等方面的问题。此外,随着 WebSocket 协议的发展,建议始终遵循最新的规范来确保兼容性。
AS3为开发者提供了Socket类来处理TCP连接,但同时也提供了NetConnection类来处理UDP通信。NetConnection类允许创建到服务器的连接,并可以用来发送和接收UDP数据包。 这个"UDP.rar_as3 udp_flash as3.0 UDP_flash...
3. 可能还包含配置文件,如XML或properties文件,用于设置Socket连接参数、服务器地址等。 为了确保程序的稳定性和性能,开发者需要考虑以下几个方面: - 错误处理:对可能出现的网络异常、线程错误等进行妥善处理...
### AS3 带进度条上传实例解析 在Adobe Flex框架下使用ActionScript 3 (AS3) 进行文件上传开发时,加入进度条功能是提升用户体验的...此外,对于实际部署环境,还需要考虑安全性问题,如使用HTTPS协议进行加密传输等。
Flex中的Socket类是AS3的一部分,位于`flash.net`包中,它提供了建立和管理TCP套接字连接的能力。Socket类允许我们创建一个到服务器的连接,并通过这个连接发送和接收二进制或文本数据。 2. **连接服务器** 使用...
根据给定文件中的标题、描述、标签以及部分内容,本文将详细介绍有关ActionScript 3.0 (AS3) 中Socket编程的基础知识与应用实践。 ### 一、ActionScript 3.0 Socket简介 #### 1. Socket概念 在ActionScript 3.0中...
【基于Socket的VB.NET聊天程序详解】 在信息技术领域,Socket通信是一种常见的网络编程接口,它允许应用程序...在实际开发中,还需要考虑到错误处理、性能优化以及安全性等方面的问题,确保程序的稳定性和用户体验。
3. **安全性**:PHP需要处理各种安全问题,如防止SQL注入,确保数据的完整性,并验证用户身份,以避免未经授权的信息访问。 4. **并发处理**:当多个客户端同时连接时,PHP需要处理并发请求,这可能涉及多线程或多...
3. **使用Flash Socket**:AS3提供了`flash.net.Socket`类,可以用来建立TCP连接。通过这个类,我们能够直接与SMTP服务器通信。 4. **构建SMTP命令**:AS3程序需要模拟SMTP对话,发送如"HELO"、"AUTH LOGIN"、"MAIL...
同时,由于Flash Player的安全策略,使用Flash Socket时可能需要设置跨域策略文件,以允许Flash应用程序访问其他域的资源。 通过深入理解这些知识点,开发者可以构建出功能强大的实时网络应用,利用Flash的Socket...