Zend AMF实现和AMF协议安全性

时间:2010-01-15 22:23:57

标签: flex zend-framework amf remoteobject zend-amf

我有一个Flex前端通过RemoteObject连接到Zend Framework的Zend Amf。这是我在客户端层(Flex)与应用程序和持久层(使用Zend Framework的LAMP)之间传输数据的唯一方法。 我可以解决安全问题的一些方法如下:

  1. 我可以通过在services-config.xml文件中使用mx.messaging.channels.SecureAMFChannel来解决TLS问题,并确保将Flash播放器加载到HTTPS包装器中并实际上使用HTTPS,因为AMF协议是在HTTP之上分层的
  2. RemoteObject有一个setCredentials方法,我可以通过该方法传递AMF身份验证标头以保护用户相关数据。假设TLS实际上是安全的,我可以在验证用户身份后在端点上公开方法。
  3. 我可以使用正确设置的crossdomain.xml防止跨站点脚本和其他 FLASH 漏洞
  4. 我的问题是如何保护我的端点免受另一个AMF消费者的攻击?例如,如果有另一个AMF消费者(不是Flash,因此不受crossdomain.xml和Flash沙盒安全性限制),而不是我的知道我的端点的Flex客户端,那么什么会阻止它使用端点公开的方法?

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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