天天看點

Webservice 安全性通路

1.通路安全性

    WebService對于我們來說并不陌生,在很多地方我們都會使用到它,它為我們帶來了很多友善,同時解決了多平台之間的通訊協定問題等等,因為WebService是以一種Http請求和Xml響應的方式來達成多平台之間的接入。這種方式我們一般稱之為‘接口’。這裡需要說明的是:所謂平台是指開發平台(例如ASP.NET和Java等開發平台)和站點平台(例如淘寶網站和支付寶網站)。就因為WebService給我們帶來種種友善,導緻有很多’同學‘大量的、無選擇性的使用WebService,進而易導緻對系統性能的降低,同時,如未對WebService通路安全性做防禦的話極有可能對系統安全性造成的緻命的漏洞。因為隻要知道WebService的Http請求位址,那任何一個用戶端都可以進行請求。而WebService将會面臨的有它所認可的用戶端和不認可的用戶端請求。

  我們來舉個例子,例如:中國移動公司對外提供了一個發送手機短信的WebService接口,并此請求位址已被公開。那任何一個用戶端都可以請求這個WebService。當這個接口沒有驗證請求的用戶端身份的話,那就意味着任何用戶端都可調用此接口進行發送短信。這樣移動不虧死才怪。是以它就會在每個用戶端請求過來時先驗證請求的用戶端是否是跟此接口達成了一種合法請求協定的用戶端。如果是合法請求則為此請求提供服務,否則對請求一概否決。

  那我們如何來判斷這些請求中哪些是合法、哪些是非法呢?以本人對WebService的開發,總結了以下比較好的三種方式驗證,并每種驗證處于不同安全級别,也可說不同使用場合。

  1.級别:低

     使用場合:在本站點使用,不對外開放。

     驗證方式:通過驗證碼驗證

     具體說明:我們可在webService服務端配置一段任意字元串(最好是MD5加密),然後用戶端發送請求過來時,同時将驗證碼發送服務端,然後再跟服務端的驗證碼進行比較來判斷是否是合法請求。例如:

代碼
[WebMethod(Description = "發送短信")]
public bool SendSms(string authString,string mobiles, string smsContent, DateTime? sendTime, ref stringerror)
{
//根據用戶端發送的驗證碼進行根伺服器的驗證碼進行比對
if (authString != "980017891ff67cf8a20f23aa810e7b5a")
{
//不是合法用戶端請求時,将拒絕對此請求提供服務
error = "非法請求,驗證身份失敗";
return false;
}
//如果是合法請求,則繼續為此請求提供服務
using (SmsFacade smsFacade = new SmsFacade())
{
if (!smsFacade.SendSms(smsContent, mobiles, sendTime))
{
error = smsFacade.PromptInfo.CustomMessage;
return false;
}
}
return true;
}      

  2.級别:中上

    使用場合:提供第三方平台使用,完全開發性

    驗證方式:通過請求的用戶端IP驗證

  具體說明:我們可以将合法請求的用戶端IP儲存在服務端(可存入資料庫等方式儲存),當用戶端發送請求過來時,可根據用戶端的IP在服務端儲存的IP中驗證是否為合法請求。例如:

代碼
/// <summary>
/// 發送短信服務
/// </summary>
/// <param name="mobiles">接收的手機号碼</param>
/// <param name="smsContent">短信内容</param>
/// <param name="sendTime">發送時間,為空則立刻發送</param>
/// <param name="error">當請求失敗時的詳細失敗原因</param>
/// <returns></returns>
[WebMethod(Description = "發送短信")]
public bool SendSms(string mobiles, string smsContent, DateTime? sendTime, ref string error)
{
//根據用戶端請求的IP進行跟服務端所配置的IP進行驗證(IP可配置在檔案中或資料庫)
if (Context.Request.UserHostAddress != "218.18.69.86")
{
//不是合法用戶端請求時,将拒絕對此請求提供服務
error = "非法請求";
return false;
}
//如果是合法請求,則繼續為此請求提供服務
using (SmsFacade smsFacade = new SmsFacade())
{
if (!smsFacade.SendSms(smsContent, mobiles, sendTime))
{
error = smsFacade.PromptInfo.CustomMessage;
return false;
}
}
return true;
}      

  3.級别:高

   使用場合:提供第三方平台使用,完全開發性

   驗證方式:身份登陸驗證

  具體說明:我們可以在服務端建一張第三方使用者資訊表,包含使用者賬号和密碼等相關資訊。用戶端請求時,必須将賬号和密碼發送到服務端進行登陸,來驗證是否為合法請求。例如:

Webservice 安全性通路
代碼
[WebMethod(Description = "發送短信")]
public bool SendSms(string userCode, string userPwd, string mobiles, string smsContent, DateTime?sendTime, ref string error)
{
//先根據用戶端發送使用者賬号和密碼登陸
UserFacade userFacade = new UserFacade();
if (!userFacade.Login(userCode, userPwd))
{
//登陸失敗,将拒絕對此請求提供服務
error = "非法請求,登陸失敗";
return false;
}
using (SmsFacade smsFacade = new SmsFacade())
{
if (!smsFacade.SendSms(smsContent, mobiles, sendTime))
{
error = smsFacade.PromptInfo.CustomMessage;
return false;
}
}
return true;
}      

以上來自網絡資訊:

其實同樣可以使用SOAPHEADER的方式提高安全性!

繼續閱讀