2010-01-15 79 views
1

我有一个Flex前端通过RemoteObject连接到Zend Framework的Zend Amf。这是我在客户端层(Flex)和应用程序和持久层(带有Zend Framework的LAMP)之间传输数据的唯一手段。是 某些方面,我可以解决安全问题如下:Zend AMF实现和AMF协议安全

  1. 我可以通过我的服务-config.xml文件中使用mx.messaging.channels.SecureAMFChannel并确保Flash播放器解决TLS被加载到HTTPS包装,是实际上使用HTTPS,因为AMF协议分层在HTTP之上
  2. RemoteObject有一个setCredentials方法,我可以通过该方法传递AMF身份验证头以保护用户相关数据。假设TLS实际上是安全的,我可以在对用户进行身份验证后在端点上公开方法。
  3. 我可以抵御跨站点脚本和其他FLASH漏洞有正确设置的crossdomain.xml

我的问题是如何保护我的终点与另一个AMF消费者?例如,如果除了知道我的端点的我的Flex客户端以外,还有另一个AMF使用者(不是Flash,因此不受crossdomain.xml和Flash沙盒安全性的约束),会阻止它使用端点公开的方法?

据我所知,我基本上需要一种方法来验证我的Flex应用程序对我的Zend Amf端点。 AMF消费者认证后,我有一些上面提到的保护机制来保护某些数据(如用户认证)。我无法在Flex swf中嵌入某种身份验证机制,因为swf易于反编译(swf不可信)。虽然敏感数据通过用户身份验证进行保护,但未保护的数据几乎不公开,但据我所知可完全公开供公众使用。

回答

0

您无法阻止任何人向您的端点发送任意HTTP请求。如果您的Flex应用程序根据服务器对用户进行身份验证,并且服务器仅在服务器上提供敏感数据(如果请求上有适当的凭据/会话ID),则一切正常。你不能做的是对用户进行身份验证,只存储在用户身份验证的客户端中。由于HTTP是无状态协议,服务器必须能够单独授权每个请求。 “常规”网站和AJAX也是如此。

0

除非提供某种认证,否则AMF客户端无法知道是谁调用了它们。 Flex发送的任何HTTP请求都可以通过非Flex方式进行模拟,正如您正确指出的那样,可以提取任何嵌入式密钥。所以这里没有通用的解决方案,但是如果您为HTTPS连接提供了客户端证书并使服务器检查了客户端证书,那么您可能可以解决一些问题。