2011-07-22 63 views
5

我目前正在開發一個應用程序,它從我已經寫入的web服務(以.net形式)下載信息,並且我想要保護連接,以便只有我的應用程序可以從服務。什麼是最好的方式去做這件事?安全地從Android應用程序連接到webservice

我不希望任何人能夠獲得訪問詳細信息,如果他們反編譯/逆向工程我的應用程序。有沒有辦法在發回數據之前驗證請求數據的應用程序的完整性?

我不關心他們能夠嗅探流量,看看它包含什麼,我只是不希望除了我的應用程序以外的任何東西能夠提交請求,以防止任何人刮擦所有的數據。

我非常喜歡安全的新手,所以儘可能簡單!

回答

2

克里斯,

您可以在閱讀的機制被稱爲一次性密碼(動態口令)。 http://en.wikipedia.org/wiki/One-time_password

您可以設計您的應用程序,以在任何時候嘗試連接到您的Web服務時生成OTP。驗證OTP真實性的責任在於Web服務。

現在讓我進入一個小細節。想象一下,您的應用嵌入了一種算法,該算法在連接到Web服務時生成並提供一個256位數字。您設計的Web服務也實現了OTP的驗證器部分。通常,OTP算法會在其實現中考慮「一天中的時間」(我建議谷歌圍繞一些免費實現)。因此,服務器端(OTP Validator)僅在服務器和客戶端的時間在刷新時間n的窗口(例如+ - n秒)內時才起作用。通常,OTP驗證器也會在其末尾生成OTP,並比較接收到的一個。您可以在發送之前散列OTP,並比較服務器上生成的OTP的HASH(雖然沒有幫助或者更安全)。

現在問題出現了,如果有人得到算法(可能只是使用開源的OTP)會怎麼樣。那麼,它的意思是。只有使用正確的密碼才能訪問良好的安全實施,即使其他所有內容都可供攻擊者使用。爲了做到這一點,您可能需要添加一個邏輯,在他們第一次連接時配置應用程序,這是OTP期望的。在這裏,我假設首先使用的信任。您可以添加一些邏輯來存儲計算OTP時使用的唯一駐留應用程序ID。此外,您將在服務器上維護「resident-id」到「public-id」的映射。您可以附加到OTP併發送到服務器以驗證發送的應用程序是否是您設置的應用程序,這是「公共ID」。這要求您將「public-id」映射到服務器上的「resident-id」,然後在生成OTP時使用「provisioned-id」。

最重要的是,您可以添加邏輯來僅招待OTP +「public-id」組合。如果有人只是嗅探並重新發送相同的請求到您的Web服務,這將防止重播攻擊。

希望這給你一些想法。

Ujj​​wal

0

你可以看到文章

,這是Blackberry kSoap2 & Soap Header非常有用

+0

我不知道我理解你的答案。目前我使用標準的http get來從webservice獲取數據。 –

+0

http://stackoverflow.com/questions/1048310/how-to-call-a-net-web-service-from-android你可以看到這個問題 – acebisli

+0

我完全理解如何調用我的webmethod,我的應用程序已經做到了。我只想知道如何確保對數據盜用的呼叫! –

相關問題