[英]Secure Communication Between iPhone and Server?
我正在開發一個連接到基於XML的API的應用程序。 我可以控制服務器和應用程序 - 有什么方法可以確保只有我的應用程序才能訪問API?
沒有用戶身份驗證。
編輯:
主要擔心的是機器人通過掃描XML來竊取數據。
這個怎么樣:
我請求與設備UDID的會話,我得到一個握手密鑰。
<handshake>23354</handshake>
從該字符串開始,根據約定的算法在服務器和客戶端上計算密碼(只需要很難重建)
讓我們說現在我將1添加到握手鍵
password = 23354
在所有API調用中,我然后將此密碼與UDID一起傳遞。 這將允許服務器將每個會話限制為一定數量的呼叫,不是嗎?
你怎么看?
假設您可以控制XML API,則可以提供快速質詢響應機制。
生成一個數字並將其包含在您的應用程序和服務器端。 將其用作客戶端和服務器上srand()的種子。
請客戶提出以下要求:
<handshake id="123">12312931</handshake>
id表示123'生成的隨機數,12312931是調用rand()123次后的值。 值123應該是隨機生成的數字(用不同的種子生成!)。
這不是一個簡單的挑戰響應,但它簡單而有效,並且不依賴於基本的ANSI C庫集。
請注意,它也不是非常安全 - 所有人都要做的就是讓你的客戶端挑戰他們自己的服務器,然后為每個種子值生成(在這個例子中)第123個隨機數,直到找到它為止。 所以我不會用它來期望它提供加密級別身份驗證或訪問控制。 它只是提供了一個簡單易懂的挑戰響應,該響應高效且易於實現。
您可以使用某種簽名來驗證它確實是您的應用程序進行調用,您計算服務器端和應用程序端的簽名,只有當它們匹配時,服務才會返回響應請求。 通常,簽名由函數的一些參數組成,后跟一個密鑰,然后獲取該密鑰的md5哈希值並通過它。 在請求中,沒有人能夠找到密鑰,因為它位於md5哈希中。
通過https訪問您的Web服務並進行身份驗證。
我認為您需要提出的真正問題是您的數據存在多大的攻擊風險。 我會說99%的時間你會很好,只是一個難以猜測的模糊URL,因為普通用戶試圖在你的應用程序之外做任何事情的機會很小。 如果你擔心競爭對手偷了你,我會建議一些更邪惡的東西:
在您的應用中,進行設置,以便您的應用和服務器每隔一段時間(可能每兩周)更改一次網址。 然后,如果有人確實試圖訪問您的XML API,那么他們將不斷爭奪您的網址。 作為錦上添花,保持舊URL活躍但讓它們返回錯誤的數據。 我想你可以讓你的想象力從這里開始並從中找出其余部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.