2010-01-15 236 views
1

我有一個Flex前端通過RemoteObject連接到Zend Framework的Zend Amf。這是我在客戶端層(Flex)和應用程序和持久層(帶有Zend Framework的LAMP)之間傳輸數據的唯一手段。是 某些方面,我可以解決安全問題如下:Zend AMF實現和AMF協議安全

  1. 我可以通過我的服務-config.xml文件中使用mx.messaging.channels.SecureAMFChannel並確保Flash播放器解決TLS被加載到HTTPS包裝,是實際上使用HTTPS,因爲AMF協議分層在HTTP之上
  2. RemoteObject有一個setCredentials方法,我可以通過該方法傳遞AMF身份驗證頭以保護用戶相關數據。假設TLS實際上是安全的,我可以在對用戶進行身份驗證後在端點上公開方法。
  3. 我可以抵禦跨站點腳本和其他FLASH漏洞有正確設置的crossdomain.xml

我的問題是如何保護我的終點與另一個AMF消費者?例如,如果除了知道我的端點的我的Flex客戶端以外,還有另一個AMF使用者(不是Flash,因此不受crossdomain.xml和Flash沙盒安全性的約束),會阻止它使用端點公開的方法?

據我所知,我基本上需要一種方法來驗證我的Flex應用程序對我的Zend Amf端點。 AMF消費者認證後,我有一些上面提到的保護機制來保護某些數據(如用戶認證)。我無法在Flex swf中嵌入某種身份驗證機制,因爲swf易於反編譯(swf不可信)。雖然敏感數據通過用戶身份驗證進行保護,但未保護的數據幾乎不公開,但據我所知可完全公開供公衆使用。

回答

0

您無法阻止任何人向您的端點發送任意HTTP請求。如果您的Flex應用程序根據服務器對用戶進行身份驗證,並且服務器僅在服務器上提供敏感數據(如果請求上有適當的憑據/會話ID),則一切正常。你不能做的是對用戶進行身份驗證,只存儲在用戶身份驗證的客戶端中。由於HTTP是無狀態協議,服務器必須能夠單獨授權每個請求。 「常規」網站和AJAX也是如此。

0

除非提供某種認證,否則AMF客戶端無法知道是誰調用了它們。 Flex發送的任何HTTP請求都可以通過非Flex方式進行模擬,正如您正確指出的那樣,可以提取任何嵌入式密鑰。所以這裏沒有通用的解決方案,但是如果您爲HTTPS連接提供了客戶端證書並使服務器檢查了客戶端證書,那麼您可能可以解決一些問題。