2010-06-18 32 views
4

我有一個Android應用程序,我想從中將一些數據上傳到我的Web服務器上的數據庫。由於MySql java庫的大小約爲5 MB,因此我不想將其與應用程序一起使用。 因此,我將爲php腳本發出HTTP請求,並將URL作爲參數發送。我如何確保只有我可以稱之爲?我不希望人們嗅探URL並在我的應用程序之外調用它。保護HTTP請求不被別人調用

謝謝

+1

這是基於PHP的身份驗證的經典案例,最有可能使用的會議... – 2010-06-18 10:44:40

回答

2

使用一個簡單的靜態令牌來標識客戶端是自己還是以提前的方式,首先使用用戶名/密碼進行身份驗證,生成令牌並將該令牌用於進一步的事務處理。此令牌可能會在一段時間後過期。

選項1:http://[your請求URL] &鍵= XYZ 其中xyz是隻知道你

選項2:用戶名密碼,併成功驗證第一個ping服務器獲取動態令牌[DKEY],本地存儲它。 然後進一步請求。 http://[your請求url] & key = dKey。

選項2是通常所遵循的選項。

+0

謝謝。我生成一個在1分鐘後過期的令牌。這似乎是最好的辦法。 – Kaloer 2010-06-19 07:53:34

1

簡短的回答:你不能防止嗅探。

但是你可以讓嗅探的生活更難通過實施一些內部認證,GET/POST預定義的參數(或動態,而是通過算法計算出你只懂得)交換,隱藏頭字段等

但所有這些都可能被嗅探/反向工程。

一種可能的Overkill Way會使用某種不對稱的私鑰/公鑰加密/簽名。如RSA。您的應用程序將只包含公鑰,並使用它簽署請求數據。而你的服務器端將有一個祕密的私鑰,它將使用它來檢查客戶端請求的有效性。

+0

私人公鑰的事情是我所知道的最好的方式。問題是每個知道公鑰的身體都可能無法下載數據。並且可以通過一些努力將密鑰從應用程序中提取出來,但這顯然不是不可能的。 – Janusz 2010-06-18 11:11:05

0

我對android知之甚少 - 但與問題無關。

如果您想阻止某人嗅探URL(以及身份驗證詳細信息?),那麼唯一的選擇是使用SSL。另一方面,如果你只是想阻止其他人訪問URL,那麼它只是一個認證問題。如果您不使用SSL,那意味着您需要使用會話和基於挑戰的身份驗證,以避免人們嗅探流量。您可以通過摘要身份驗證或滾動自己的代碼來完成此操作。

C.