1

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

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

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

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

4

2 回答 2

0

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

于 2010-01-16T20:46:06.620 回答
0

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

于 2010-01-20T01:18:31.403 回答