做項目時,經常會用到WebService來通訊,但WebService釋出後為了能調用,一般都通過釋出到IIS後調用 的。在IIS裡可以通過匿名通路,但這樣大家都可能通路,不安全,是以可以提供作業系統配置設定一個帳号來登入到IIS 。這隻是對通路伺服器上的檔案進行了限制,以前我也是采用這種方式,上次看到另 一種方法來防止 别人調用WebService,就是對方面進行加密,總結下來,對于WebService可以采用以下二個方法來有效防止别人調用:
第一、禁止匿名通路,對WebService進行認證,這步主要是通過作業系統的安全機制來實作的,也就是隻有滿足一定要求的帳号才能通路到伺服器,才能通路IIS,這個可以通過通路我以前的随筆C#調用Web Service時的身份驗證 ,在這裡有詳細的說明,在些不我說了;
第二、在第一種方法的基礎上對WebService裡的方法進行加密,這裡面方法很多,下面提供一種比較常用的方法。在調用方法時多提供二個參數使用者加密解密用(當然了提供幾個參數看自己的需要而定)。比如有個WebService方法是根據顧客ID擷取資料庫中的顧客的詳細資料為GetCustomerDetailByCustomerID(string custID);如果隻提供一個參數,則很容易被别人通路調用,進而顧客資料很容易被别人擷取,是以我們對這個方法進行加密GetCustomerDetailByCustomerID(string scustID,string custID,ecustID);這樣,隻有提供正确的scustID與ecustID這二個參數才能成功調用這個方法,而對于這二個參數scustID與ecustID,則可以通過加密方法生成一個字元串,如scustID='C39134558',ecustID='C39223525',隻有這二個參數滿足一定的條件時才算驗證通過,而對于參數來說,我們也可以提供一個驗證,如果scustID裡的值C39134558,前面三位必須是C39,緊跟5位13455則相加後的值18進行位操作如,對值18加一個因子,如1,則出現以下的運作:(18+1)%11==8,這樣隻有最後一位為8才算這個參數值是符合要求的,是以随便輸入一個參數如:C39134556,則因為不符合要求,是以驗證不能通過。在這裡即使二個參數scustID='C39134558',ecustID='C39223525'都對了,則還需要通過這二個參數的進一步的驗證才能算成功。至于這二個滿足什麼要求,一種是可以采用現有的加密機制,也可以自己寫一個加密類來襪。 上面隻是舉一個簡單的例子。
通過上面的二個步驟,則可以實作比較安全的WebService調用了。當然方法很多,上面隻是小弟的一些經驗而已,如果博友還有更好的方法,不吝賜教。