2011-11-14 57 views
3

我目前有一個iOS應用,允許用戶將內容提交給我們的服務器(twitter like)。我們沒有登錄系統,而是依靠設備的UDID來唯一標識用戶(是的,意識到這不是完美的,但值得用戶不必創建帳戶的權衡)。向服務器註冊iOS應用請求以防止垃圾郵件

來自iOS應用程序的請求會作爲POST請求發送到我們的服務器,並且不會以任何方式進行身份驗證。

我們目前正在經歷很多垃圾郵件(顯然),並且正在尋找一種簡單的方法來驗證任何請求觸及我們服務器的事實上來自我們的應用 - 而不是垃圾郵件發送者寫的一些腳本。

我們嘗試使用包含應用程序名稱但很容易被欺騙的用戶代理字符串。有什麼方法可以驗證來自我們服務器的請求是來自我們的應用程序嗎?

一個想法可能是包含一個隨機數作爲參數,然後使用某個私鑰加密該數字。讓服務器驗證加密版本是否爲純文本版本。 (私鑰必須在我們的服務器上以及嵌入到應用程序中)。

我不是在尋找完美的解決方案 - 90%的解決方案易於實施是首選。

謝謝!

+0

獎勵積分:如果在服務器上可以進行更改(即不需要新的客戶端代碼,客戶端仍然只發送設備報告的UDID) - 那太棒了! – aloo

回答

1

我會解決這個問題,接受消息,用一個只知道你的應用的祕密密鑰給它加鹽,並且可能添加用戶名和UUID,然後用SHA-1對它們進行哈希處理。如果散列與數據一起出現,那麼它將充當數字簽名,並且您可以合理確信該消息是真實的。

共享密鑰必須與您的應用程序一起分發,因此一個非常堅定的攻擊者將能夠將您的應用程序逆向工程化 - 但是偶然的垃圾郵件發送者將更有可能尋求更加綠色的牧場。

另一種方法是在註冊時生成一個pgp私鑰/公鑰對,但這對於這個問題有很多工作要做。

相關問題