2010-09-18 54 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