2013-06-12 136 views
5

我正在使用自定義授權方法處理以API爲中心的Web應用程序,該方法包括基於請求方法,URL,參數,公開API密鑰並由專用API密鑰編碼。這在服務器端工作正常,但在客戶端,私有API密鑰(和授權方法)將會受到攻擊。我花了最後一個小時左右的時間尋找一個很好的方法來保護這個API密鑰,我能找到的最好方法是通過我的服務器進行代理,但我仍然無法確定100%。保護客戶端(JavaScript,Android,iOS等)上的API密鑰

首先,我應該擔心嗎?我想在我的Web應用程序中將安全性設置爲優先級,但任何將修改用戶帳戶的操作都需要一個臨時的加密標記來授權請求​​(除了HMAC散列)。

我從代理的理解是,你會向你的服務器發出請求,然後用私鑰加密並返回信息..但是服務器如何驗證請求是否來自具有有效API的源鍵?

任何人都可以提供任何見解,我應該做什麼?我覺得這可能是任何客戶端代碼(包括JavaScript,iOS和Android)的潛在漏洞。

+1

請[不要在您的帖子中使用簽名或標語](http://stackoverflow.com/faq#signatures)。 – meagar

+0

私鑰以何種方式易受攻擊?你必須把鑰匙給客戶或它不會工作...... – dandavis

+0

目前,客戶只會是我的官方應用程序(網絡和手機)。但私鑰和授權方法將在JavaScript源代碼中可見,以便在網站上進行任何AJAX調用。 – Sam

回答

4

你永遠不能相信客戶。即使你混淆,有人仍然可以弄明白。例如,攻擊者可以對混淆算法進行反向工程,查看設備內存,甚至可以捕獲通過線路發送的內容。

但是,您仍然可以通過在服務器端強制安全來製作安全的應用程序。例如,用戶需要進行身份驗證才能成功進行特權API請求。

此外,無論是通過輸入驗證,速率限制還是IP地址跟蹤,您都可以在服務器端強制執行A​​PI使用。

+0

每當我回過頭來看這個問題時,我都會看到「你永遠不能相信客戶。」我已經成爲這種心態的忠實粉絲,甚至還幫助簡化了一些API創建(即無需在註冊時進行密碼確認,因爲客戶端無論如何都可以僞造)。 – Sam

+0

@sam確認是讓用戶確保他們鍵入他們認爲他們鍵入的內容。以錯誤的方式錯誤輸入密碼的可能性較小。 –