我無法確定以下場景的最佳方法。針對iOS應用的安全設計
- 我的應用程序發佈到我的web服務。
- POST URL包括幾個參數,包括設備信息+共享的祕密
- 將存儲在我的數據庫設備IF共享的祕密是正確
目前,這個共享祕密在應用程序中進行硬編碼,並通過SSL連接到我的Web服務。
這顯然限制了人們發現共享密鑰和濫用我的網絡服務。
但是這種方法並不像我想的那樣安全,因爲解碼我的應用程序等等的可能性和獲得祕密。
有沒有更好的方法來做到這一點,而不是共享祕密方法?
我無法確定以下場景的最佳方法。針對iOS應用的安全設計
目前,這個共享祕密在應用程序中進行硬編碼,並通過SSL連接到我的Web服務。
這顯然限制了人們發現共享密鑰和濫用我的網絡服務。
但是這種方法並不像我想的那樣安全,因爲解碼我的應用程序等等的可能性和獲得祕密。
有沒有更好的方法來做到這一點,而不是共享祕密方法?
對於本地密鑰,幾乎所有的安全方法都可能被某人以某種方式泄漏。這當然是而不是意味着我們根本不需要付出任何努力。 如果有人下載你的應用程序中可以可能進一步調查由reengineering and or refactoring
但是代碼,如果沒有其他的辦法不是把密鑰您的應用程序中的二進制,你留下了一個(弱)替代方案通常稱爲security through obscurity。
有很多方法可以做到這一點,你也許可以找到關於這個話題在互聯網上有很多的討論,所以這裏只是一些想法:
甚至有一些框架像UAObfuscatedString這可能會幫助你實現你的邏輯。
請記住,最好的方法總是到not hardcode a secret key within your apps binary
,但不知何故「加載」你的服務器的祕密,例如,計算密鑰...
謝謝亞歷山大。關於你的最後一條評論 - 如果我沒有將密鑰存儲在應用程序二進制文件中,我還能知道訪問我的API的人是安裝了我的應用程序的合法設備....或者使用某些東西的欺騙者像CURL ..?如果可以從服務器檢索祕密,那麼任何設備/ pc /用戶都可以獲得API密鑰... – mmmbaileys
您可以使用用戶註冊,並在用戶成功管理後,與他分享一個祕密(應用程序)。應用程序將密鑰存儲在鑰匙串中。當調用您的「安全API」時,應用程序可能會把密鑰鏈中的祕密密鑰放在授權頭中,該頭將包含設備標識符和一些其他屬性 - 查看使用hmac1_sha的amazon webservice概念:http://docs.aws.amazon.com/AmazonS3/latest/開發/ RESTAuthentication.html – Alexander
當你允許人們下載你的應用程序並執行它時,你給他們的是目標代碼。因此,任何解決方案都不會完全安全,因爲您必須以某種方式將「祕密」放入程序中,否則程序將無法運行。 –