2010-12-13 125 views
3

我正在創建一個需要連接到基於PHP的網站的iPhone應用程序。 iPhone應用程序將檢索並添加記錄。我猜測網站和iPhone應用程序之間的通信應該由API密鑰來控制。 iPhone應用程序提供了它和網站檢查。在iPhone應用程序中存儲API密鑰不安全?

我猜我必須將該API密鑰存儲在iPhone應用程序本身,對吧?所以我的問題;將API密鑰存儲在iPhone應用程序中有風險嗎?有人無法以某種方式訪問​​我的API密鑰並冒充iPhone應用程序,從而獲得訪問該網站的權限?或者這很難做到?如果我以錯誤的方式思考它,請告訴我是否有更好的方法。

+2

你有什麼樣的api和鑰匙?如果它是OAuth'application_key'和'application_secret',那麼你與此無關,因爲你必須**將它們存儲在手機上。是的,可以提取它們並完成API允許您手動執行的所有操作。 – zerkms 2010-12-13 07:46:07

回答

10

無論你需要保密還是不保密,你都必須加密和混淆它,只是爲了保護自己免受偶然黑客的侵害。

另一方面,我不相信你可以阻止一個堅定的黑客。越獄,gdb和流量嗅探器的組合將會打敗幾乎所有你能想到的保護。大量投資於此類保護措施很少有意義,因此您必須在浪費大量時間和精力並讓您的API密鑰破解之間找到妥協方案。

就我個人而言,我喜歡在應用程序二進制文件中以模糊形式存在API密鑰的想法,因爲您從App Store獲取的二進制文件是加密的。有PT_DENY_ATTACH的ptrace()小問題可能會使複雜(但絕不會完全阻止)通過gdb進入您的應用程序。有機會,這將足以避免讓你的應用程序以解密的形式在互聯網上流動。那麼你將不得不使用HTTPS,因爲嗅探流量很容易,甚至不需要越獄。

一個更重要的考慮因素。如果HTTPS無法解決問題,並且您必須在HTTP請求中發送API密鑰,請忘掉上述所有內容。如果它通過網絡以純文本格式發送,那麼保護應用程序包中的密鑰沒有任何意義。

-1

您可以使用鑰匙串服務來存儲密鑰,如Mac存儲密碼 - 不是100%確定,但我認爲它也加密密碼並將它們保存在安全的沙箱中以防其他撬手(當然,越獄中的沙箱沒有意義) iPhone與像Costique合適的工具提及)

無論哪種方式,值得期待到:

http://developer.apple.com/library/ios/#documentation/Security/Conceptual/keychainServConcepts/iPhoneTasks/iPhoneTasks.html

但可以肯定的使用HTTPS,否則任何人都可以嗅出費多少力氣。

+1

這是用於存儲用戶的密碼。但開發人員的鑰匙必須包含在應用程序中 – user102008 2011-09-22 02:08:19

相關問題