Delphi編寫網路程式的安全措施 (轉)

gugu99發表於2007-10-14
Delphi編寫網路程式的安全措施 (轉)[@more@]

編寫的措施

Delphi的MIDAS為編寫網路程式提供了十分方便的手段。利用這些控制元件,可以編寫上的客戶機/體系程式,也能方便地在Inte上建立分散處理的應用。

網路程式的一個重要問題是安全性考慮。一些敏感資料在網送,很有可能被人攔截以造成不必要的損失。在實際的過程中,我採取了一些有效的防範措施,在此作些簡單的介紹。

一、 原理

目前進行資料的方法很多,對資料的保護起到一定的作用。但如果採用固定的金鑰或是金鑰隨資料一起傳送,則均不能達到令人滿意的保密效果。在實踐過程中,我摸索出了一套“請求-應答”的隨機金鑰方法,對密碼和資料的保密效果都令人十分滿意。

當客戶端程式啟動並企圖與伺服器程式建立連線時,客戶程式從伺服器端取得一個由伺服器程式產生的隨機字串,將以此字串為金鑰來傳送登入密碼和資料。由於金鑰由伺服器程式隨機產生,客戶每次登入時金鑰均不相同,因此大大減少了密碼被攔截導致資料被竊的可能性。

伺服器端可以在資料模組中引出一個自定義介面,該介面返回一個隨機字串。遠端資料模組要記錄該字串作為後續處理的金鑰。隨機字串的產生法可以多種多樣,最簡單的方法是用Ran()產生一個隨機數後再由此數用Format()函式或IntToStr()產生一個字串。

二、 使用者登入措施

為了防止程式被非法從而洩露密碼,必須將客戶的登入資訊在伺服器端處理,也可以專門增加一個安全層負責客戶的登入。客戶的登入資訊儲存在客戶資料表中,包括使用者名稱、密碼、等資訊。

客戶程式登入時,先伺服器程式的介面獲得金鑰字串,並用此金鑰對使用者輸入的使用者名稱和密碼進行加密並向伺服器傳送登入資訊。加密演算法可以是DES演算法或其它有效演算法。伺服器接到登入資訊後,先用先前產生並記錄的隨機金鑰對登入資訊進行,再將解密後的資訊與的客戶資料表中的資訊進行對照,從而判斷客戶資訊是否合法以及該客戶享有的資料許可權等。

該過程的客戶端程式如下:

strKey:=myRemoteSever.GetKey();

{呼叫伺服器的介面獲得隨機金鑰}

UserName:=Ency(strUserName

strKey);

{對使用者名稱加密,Ency()為加密演算法}

Pass:=Ency(strPassword

strKey);

{對登入密碼進行加密}

If myRemoteServer.LogIn(UserName

Password) then {登入}

Begin

{進行處理}

End;

伺服器端的登入過程LogIn()如下:

strUserName:=DeEncy(UserName

strKey);

{對使用者名稱解密,DeEncy()為解密演算法}

strPassword:=DeEncy(Password

strKey);

{對登入密碼解密}

{查詢}

if (Pass) then

Result:=true

Else

Result:=false;

要注意的是,在伺服器程式和客戶程式中,StrKey均應定義為全程變數。

為了防止客戶資料表被程式外開啟從而洩露密碼,可以對客戶資料進行一定的加密措施,例如PARADOX表可以新增Password,伺服器程式在訪問客戶資料表時先提供該Password。

三、 資料傳送

在網路程式中,一些敏感資料在網上傳送時必須加密。Delphi的MIDAS機制提供了資料加密的途徑,可以在資料傳往客戶端之前對一些欄位進行加密,也可以在接收到客戶端的資料請求後對來自客戶端的資料的相應欄位進行解密後才向資料庫進行更新。為了達到些目的,可以在伺服器程式的遠端資料模組中加入一個Tprovr或是TdataSetProvider,並將此物件的DataSet屬性置為要處理的資料集。在Tprovider的OnGetData事件中加入如下程式碼:

with DataSet do

begin

while not EOF do

begin

Edit;

SensitiveData.AsString :=

Ency(SensitiveData.AsString

strKey);

{對敏感資料加密}

Post;

Next;

end;

end;

以上程式碼可以將敏感資料加密後再送往客戶程式。

同樣,在Tprovider的OnUpdateData事件中加入一些處理程式碼便可對客戶端送來的資料進行解密。

以上只是介紹了網路程式安全措施實現的一般原理,在此基礎上,可以增加其它保密措施,以達到更好的保密效果。例如,客戶程式可以用特定的輔助裝置來增加安全性。在智慧卡應用程式中,客戶程式在登入時不僅要求使用者輸入使用者名稱和密碼,程式同時檢查IC讀寫器中IC卡的型別及特定的內容,這樣,既使密碼洩露了不會被人冒名登入。當然,任何安全措施都不是絕對安全的,安全措施還要有嚴格的保密制度及使用人員的高度的保密意識才能真正起到保密作用。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-976380/,如需轉載,請註明出處,否則將追究法律責任。

相關文章