【问题标题】:Zend AMF implementation and AMF protocol securityZend AMF 实现和 AMF 协议安全
【发布时间】:2010-01-15 22:23:57
【问题描述】:

我有一个通过 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 不能被信任)。虽然敏感数据通过用户身份验证受到保护,但未受保护的数据几乎不公开,但据我所知,它完全开放供公众使用。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多