2012-07-05 103 views
4

我有一個iPhone應用程序正在服務器上使用我的php api,但如果有人知道該URL,它目前是打開的。我想確保,直到我已經準備好,使之成爲公共的API(如果我連做)保護對PHP API的訪問

我已閱讀this article但我不確定他們是什麼意思時,他們說沒有人可以使用這個API:

[CLIENT]在進行REST API調用之前,將許多獨特的數據組合在一起(這通常是您打算髮送的所有參數和值,這是AWS網站上代碼片段中的「數據」參數)

我不明白如果我散列我計劃發送的參數與我的api祕密如何這是mor如果我發送未加密的參數/值,則不僅僅是哈希api祕密。

+0

[保護web-API訪問權限](http:// stackoverflow。com/questions/3130969/secured-web-api-access) – 2012-07-05 19:37:06

回答

5

HTTPS API並使用API​​密鑰。然後你就會知道只有擁有密鑰的人(你在這種情況下)才能訪問API。

你對此沒有任何擔保是正確的。這就是爲什麼我建議你SSL連接。除非你打算加密你傳送的所有信息。

公鑰/私鑰方案也可以很好地工作。 HTTPS非常需要最小努力

-1

爲了開發目的,您可以使用您的Web服務器設置來僅允許來自您的IP的請求。

+1

嗯,我不是在談論開發目的,我想在iphone應用程序中有一個API密鑰/祕密。所以任何運行我的應用程序的iphone都將使用我的api密鑰。在未來,如果我打算爲其他用途打開api,我想確保它受到保護。 – mkral 2012-07-05 19:21:05

2

Digital signatures提供驗證通過不安全連接發送的消息的方式。

設置:每個客戶都會有自己的私鑰公鑰(只有私鑰需要被存儲在客戶端)。服務器將存儲每個客戶端的公鑰。公共密鑰對所有人都是可見的,並且可以被服務器用來識別客戶端。只有客戶知道的私鑰,它永遠不會顯示給任何人。

客戶端簽名請求:連同請求數據的其餘部分,客戶端將散列合併的請求數據並用私鑰加密散列。服務器將以相同的方式生成哈希(將簽名從哈希計算中除去),然後使用公鑰對簽名進行解密。如果哈希匹配,請求是真實的。

請注意,HTTPS允許客戶端證書,因此您可以利用現有工具完成上述所有操作,而無需編寫一行服務器端代碼(您只需配置Web服務器;唯一的訣竅是使確保服務器只接受已有的證書)。此外,客戶端代碼的數量應該最小:您不需要做太多的事情就可以設置連接來使用客戶端證書。由於您正在控制客戶端,因此可以使用自簽名證書並將該服務器添加爲證書頒發機構。關於使用client certificates in iPhone apps有幾個關於SO的問題;你可以從閱讀他們開始。

還要注意,只要應用程序的副本在可信的​​範圍內,任何保護Web API的方案都將發揮作用。如果任何人不信任他們,他們可以使用應用程序或提取應用程序使用的任何祕密數據並按照他們的意願訪問API。

+0

好吧,這是我的問題,但是,爲什麼你要結合數據並將其與api祕密散列呢?發送,然後發送未加密的數據?如何更安全,而不僅僅是散佈api的祕密? – mkral 2012-07-05 19:31:24

+2

@mkral:不是,你很困惑。您可以將前綴和後綴等組合在一起,並將散列算法相乘,也可以將用戶的ID和用戶名組合在一起。這與您發送的實際數據無關,您將其與其他所有內容一起發送。 – 2012-07-05 19:33:07

+0

好的,謝謝。所以這只是複雜的哈希? – mkral 2012-07-05 19:35:19