我有一個在C#中的應用程序,它將一個對象序列化爲XML到我的服務器的HTTP流。服務器有一些php,它在mysql中運行一個存儲過程,並將xml數據作爲其唯一參數。如何防止任何人發送請求到我的網絡服務
問題是,有人可以很容易地發送一個相同格式的xml與一大堆的廢物數據庫會毀了數據庫。我有什麼選擇來防止這種情況發生?
我很新的Web請求,所以我甚至不知道從哪裏開始。
我有一個在C#中的應用程序,它將一個對象序列化爲XML到我的服務器的HTTP流。服務器有一些php,它在mysql中運行一個存儲過程,並將xml數據作爲其唯一參數。如何防止任何人發送請求到我的網絡服務
問題是,有人可以很容易地發送一個相同格式的xml與一大堆的廢物數據庫會毀了數據庫。我有什麼選擇來防止這種情況發生?
我很新的Web請求,所以我甚至不知道從哪裏開始。
您應該使用某種形式的身份驗證和授權。在基於SOAP的服務中,有WS-Security擴展名。這是另一個article on MSDN,解釋了這是如何工作的。不過,我不知道PHP方面對這些標準的支持是什麼。如果您正在使用某種自定義協議,則只需要將用戶名/密碼與請求一起發送並在服務器端進行驗證即可。
會檢查出來,我試着用肥皂做,但不能讓我的頭靠近它 – Jimmy 2010-07-27 12:20:11
我們需要一個用戶名和密碼才能提供給全部輸入參數列表,這些列表在處理請求之前根據我們的後端用戶登錄系統進行驗證。低科技,但爲我們工作。
firin'我的數據包嗅探器... – Will 2010-07-27 11:46:50
它當然是在HTTPS上 - 是否仍然容易受到數據包嗅探? – 2010-07-27 11:55:36
@Dr Herbie,不,HTTPS不容易被數據包嗅探。 – 2010-07-27 11:56:50
你打算讓這個客戶在公共手中在互聯網上嗎?如果是這樣,可能不可能阻止使用不同軟件的人,因爲他們總是可以對應用程序進行反向工程,以找出您正在使用的安全機制。因此,您唯一的防範就是在服務器上徹底驗證數據。
您可以通過修改客戶端來要求使用HTTPS將數據發送到服務器的用戶名和密碼來解決這個問題,至少您知道誰是受損的。但是,如果你有一個更封閉的受衆,你可以使用某種客戶證書系統或IP過濾。
是的,會有很多客戶(希望如果賣得好......)讓我想到,數據的存儲方式,只需要擦除單個用戶的數據就可以簡單地修復攻擊 – Jimmy 2010-07-27 12:19:18
我們的解決方案(我們在這方面絕對是天真的)是我們在服務器上以非均勻的方式生成一個唯一的密鑰(即,很難預測「下一個」值會是什麼be),並將其作爲登錄過程的一部分提供給客戶端代碼。然後需要將該值傳回以用於每個請求作爲第一個參數。
這可以確保:
這並不保證:
你會發現只要用戶計算機上的代碼正在與您的服務器,您無法控制該機器上的代碼,只能控制該服務器上的代碼。因此,如果用戶機器向您發送源自不同程序的請求,那麼看起來就像它們會和應該如果您的代碼生成它們一樣,您將很難確定這是發生了什麼。
類似於nonce權利?我想可能連續有兩個http請求 - 一個只是請求一個像你這樣的隨機數或密鑰,它只在很短的時間內有效,並且會隨xml一起返回用戶和密碼。仍然願意讓別人請求一個密鑰並將其發回,但我想至少應該採取另一種措施 – Jimmy 2010-07-27 12:25:04
從我所瞭解的客戶端是C#,服務器是PHP。 – 2010-07-27 11:39:45