簡體   English   中英

iPhone和服務器之間的安全通信?

[英]Secure Communication Between iPhone and Server?

我正在開發一個連接到基於XML的API的應用程序。 我可以控制服務器和應用程序 - 有什么方法可以確保只有我的應用程序才能訪問API?

沒有用戶身份驗證。

編輯:

主要擔心的是機器人通過掃描XML來竊取數據。

這個怎么樣:

我請求與設備UDID的會話,我得到一個握手密鑰。

<handshake>23354</handshake>

從該字符串開始,根據約定的算法在服務器和客戶端上計算密碼(只需要很難重建)

讓我們說現在我將1添加到握手鍵

password = 23354

在所有API調用中,我然后將此密碼與UDID一起傳遞。 這將允許服務器將每個會話限制為一定數量的呼叫,不是嗎?

你怎么看?

不,不可能真正確保只有您的應用可以聯系您的服務器。 有一些混淆技術可以提高攻擊者的攻擊力,這些技術對大多數攻擊者都有效。 對於專門的攻擊者而言,您的潛在問題無法解決。 您可以在iPhone上找到有關此主題的其他帖子列表:如何加密字符串 您可以在這些帖子中使用幾種技術,並討論如何以及是否應該攻擊基礎問題。

假設您可以控制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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM