2016-10-14 99 views
0

幾天前,一個人反編譯我的應用程序,並在我的源代碼中顯示一個問題。我在應用程序的源代碼中硬編碼鏈接和我的服務器的密碼,我不知道通過反編譯任何人都可以看到我的源代碼。我使用proguard,但proguard不會混淆字符串。這讓我想知道如何做到這一點的正確方法?我的應用程序如何進行api調用,服務器可以對其進行身份驗證?我做了一項研究,但沒有看到有關這方面的內容。我的應用不管理用戶和密碼。我存儲在我的代碼中的用戶和密碼是要在服務器中登錄的用戶和密碼。Android服務器通信安全

+0

我相信你是指這篇文章。 http://stackoverflow.com/questions/14570989/best-practice-for-storing-private-api-keys-in-android –

回答

0

是的,很容易看到反編譯的Java代碼來獲取密鑰等。

有幾件事情要做:

  1. 確保「應用程序鍵」或「標記」不深管理員權限祕密。許多SaaS/API提供商爲您提供多個密鑰。一種是客戶端密鑰在可執行的特權/操作中受到限制,另一種是具有更多特權但不會通過客戶端代碼泄漏出去的服務器密鑰。在你的情況下,你不應該共享相同的服務器登錄/管理密碼。槓桿原理最小特權(https://en.wikipedia.org/wiki/Principle_of_least_privilege

  2. 確保字符串是一個靜態的最終。在這種情況下,編譯器和Proguard允許字符串內聯。這使得知道該字符串的用途有點困難。如果你有一個單獨的「Config」類,那麼在facebookAppId,'secret'googleSecret等搜索'facebook'是非常容易的。

  3. 要真正安全,你可以對一些加密或其他算法字符串,但這意味着您也將加密密碼存儲在代碼本身中。

總的來說,我認爲(1)給出了最,因爲你應該總是假設在客戶端的任何字符串可以發現/砍死,無論安卓/ Java的使用ProGuard或精縮的JavaScript。