2011-11-06 24 views
2

我用我的iPhone應用程序使用JSONP API的Web應用程序。我如何確保這一點,以便其他地方的請求無法訪問我的API?如何保護來自iPhone的JSON請求?

澄清:我的數據並不重要。您甚至無需登錄即可查看。我只是不想讓我的數據庫處理其他來源的查詢。

+1

經過您的澄清,我建議我給出的答案。這就是我在4個生產應用程序中使用的。重申一下,確保您的Web服務端點以https開頭,並在每個請求中放入一個祕密字符串(無論是頭文件還是實際正文)。那有意義嗎?在iPhone中,我使用ASIHTTPRequest並添加如下頭部:[request addRequestHeader:@「Secret-Header」value:@「WJQPSWDWEPONSDMNVOEOIWUER」]; – Vinnie

回答

3

你已經開始了一個非常非常複雜的課題。準備好自己的一些非常漫長的夜晚閱讀保護您的應用程序的各種貓和鼠標技術。我認爲你最好的選擇是在每個請求的標題中加上一個祕密字符串。事情是這樣的:

祕密標頭:#$ F @ FQAFDSFE#$%#ADSF())*

驗證服務器端頭和使用SSL。有人可以很容易地迴應這個帖子,「這不會阻止這個,這個和這個」,他們會是對的。問題是,你是否擔心有人耗盡你客戶的賬戶?或者你只是擔心99.9999%的人口沒有足夠的意願劫持你的垃圾?

有些人對此有各種意見,但是如果您的用戶需要身份驗證才能訪問Web服務,只需要通過SSL在標頭中發送用戶名和密碼即可。他們仍然可以劫持您的服務,但無法看到他們無法預料的任何內容。這隻適用於用戶級別的設置類型。如果它是完全公開的,你必須考慮你的數據是多麼不重要。這可能不如你想象的那麼重要。

+0

您如何設置Secret-Header值?我的理解是,你不想在iOS應用程序中發佈內置的祕密值。 – ryanfelton

1

您可以在iPhone客戶端中嵌入一個私有RSA密鑰,併爲每個請求發送一個簽名的時間戳。
服務器將驗證公鑰的時間戳並拒絕未簽名的請求。

敵人可以拆解iPhone客戶端並竊取密鑰,而你無法對此做任何事情。
(除黑名單軍備競賽等)

0

一種傳統的方式做,這是採取一切您所請求的網址變量,添加一個「祕密」的字符串,散列整個事情,並把它添加作爲附加url變量。在你的API方面,你做同樣的事情,如果哈希匹配你給的東西,它可能來自你的應用程序。

1

您可以將TLS協議與客戶端證書一起使用。 http://en.wikipedia.org/wiki/Transport_Layer_Security

此解決方案的唯一問題(目前尚未解決)是客戶端證書存儲在應用程序二進制文件中,並且可以進行retro-eenginered。

+0

對於iPhone上的TLS客戶端證書實現,使用ASIHTTPRequest http://allseeing-i.com/ASIHTTPRequest/How-to-use AFNetworking不支持。 –