2010-09-18 56 views
1

刚才我发现,当我的Flex应用程序执行ChannelSet.login时,它实际上是以未加密的形式通过线路将用户名和密码发送到BlazeDS服务器。虽然我通过AMFChannel使用二进制AMF协议,但对于有人嗅探这些密码却无需任何帮助。如何在Flex ChannelSet.login期间保护凭据?

我的大多数客户不想在https(SSL)受保护的站点上运行其应用程序。那么做到这一点的最好方法是什么?我在后端使用Spring安全性来执行身份验证。

在调用登录名之前,我应该自己加密凭据吗?我想我会需要知道服务器端加密algorthym。

想法?

回答

3

如果没有SSL,您只能使用客户端和服务器之间的共享加密技术。在这种情况下,您可以在BlazeDS中实现一个自定义的LoginCommand,它将解密传入的加密用户名/凭证以便在服务器端使用。

还有其他技术(SSO,PreAuthentication,SessionKeys),但是如果你的客户不愿意为SSL付出代价或准备强迫他们的用户使用自签名的Selg签名的SSL证书,那么我怀疑他们会去替代。

如果您担心正在进行comprpm化的用户名/密码,那么当使用带有用户名/密码的ChannelSet.login时,最低要求是SSL。

我认为一个好的解决方案是通过使用用户名/密码的HTTPS登录,然后使用用户名/会话密钥通过HTTP检查即将到来的非安全请求是否来自有效的用户。会话密钥在任意数量的时间后超时。

+0

看起来像共享加密是一条路。可以使用用户名作为盐。我知道没有办法阻止一个坚定的黑客,但任何事情总比没有好。 – HDave 2010-09-18 19:59:59

0

如果您使用Java,最好的方法是使用Spring Security。

http://www.adobe.com/devnet/flex/articles/flex_security.html英语

+0

这是一篇不错的文章,但作者的代码遭受了这个问题构成的同样致命的安全缺陷。他的Flex客户端将“明文”中未加密的用户名和密码发送到Spring安全后端进行身份验证。解决方案微不足道。这就像拥有一个巨大的防弹保险箱,其组合写在粘在门上的便签上! – HDave 2010-09-20 14:21:33