2012-02-25 91 views
0

我有一個服務器上存儲的mysql信息。現在我需要我的Iphone應用程序能夠登錄到帳戶並更新存儲在數據庫中的信息。所以我想知道,最好的辦法是什麼呢? 我應該使用POST發送數據到PHP腳本,然後回顯用戶可以登錄或不登錄的響應嗎?(用戶名和密碼匹配)?從Iphone App登錄到Web服務器?

這只是這似乎不安全,我也需要創建某種會話,一旦登錄階段已完成?

我從來沒有這樣做過,所以會真的感謝任何幫助!

非常感謝

回答

1

您描述了實現它的常用方法。你需要某種你可以「交談」的webserivce。它以您將數據發佈到webserivce的方式完成,webserivce(例如用PHP編寫)打開到數據庫的連接並返回請求/登錄成功。

如果您只是以明文形式發送密碼,而不是不安全,那麼您是對的。我使用兩件事來使通信更安全。

  1. SSL:如果可能請建立安全連接。但有可能你沒有通過ssl連接的選項。

  2. 密碼散列:您至少可以散列密碼。在正常情況下,用戶名在應用程序中是公開的,但密碼不是。哈希函數是返回一個字符串的函數,它對人類看起來是隨機的。散列函數是單向函數。沒有辦法回到原來的字符串(如果你沒有幾臺超級計算機和幾百年的時間)。因此,一旦你在你的web服務中檢索了一個哈希密碼,只需在數據庫中加密密碼並進行比較。如果使用相同的散列函數,則字符串總是返回相同的散列值。常見的散列函數:MD5SHA familiy

我希望我的回答可以幫助你了。也許我的方法不是最安全的,但直到知道沒人告訴我更好的東西。 ;-)

1

對於手機應用程序,桌面應用程序和一些網絡應用程序,這是一個常見問題。 Sandro Meier(above)正確地表示,如果您有SSL訪問權限,那麼這是通過HTTP POST發送用戶名和密碼的最佳方式,因此網絡上的其他人無法嗅探到這些詳細信息。

如果你不能使用HTTPS,那麼我會從你的iPhone應用推薦。 1.將用戶名+密碼從iPhone發佈到PHP。 2.在PHP代碼中的服務器上,檢查這些詳細信息,如果正確生成一些隨機標記,例如(KHnkjhasldjfoi & *),則可以使用PHP中的MD5哈希函數執行此操作。 3.將該散列保存在數據庫中,以便知道您將其發回給哪個用戶。 4.現在,從應用程序到PHP的所有其他請求都包含此令牌和請求(在PHP中,您將需要檢查該令牌,並且該令牌是否有效,然後獲取或更新數據)。 5.這樣,如果有人試圖嗅探他們沒有訪問用戶密碼的連接,他們只能竊取令牌。

如果您希望99%安全,您需要使用HTTPS連接(但HTTPS可能是僞造的,我在Computer World中對此進行了描述)。

這位前面提到的人使用MD5哈希來發送用戶名密碼,但這也可以被黑客攻擊(用戶可以下載你的應用程序,找到鹽的MD5哈希,這樣他們仍然可以竊取任何密碼)。我認爲W3C表示他們不建議對Web表單和密碼頁面進行加密,因爲幾乎任何東西都可以解密(我認爲Quantum計算機甚至可以解密HTTP),因此它建議使用HTTPs,因爲它提供了HTTPs發送敏感數據的最高安全性。

W3C密碼明確。 http://www.w3.org/2001/tag/doc/passwordsInTheClear-52

+1

我喜歡你提到的量子計算機。一旦他們適合日常使用,我們需要得到真正的新算法來加密...... – 2012-02-26 15:59:15