Delphi編寫網路程式的安全措施 (轉)
編寫的措施
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用Delphi編寫DelTree程式 (轉)
- 用Delphi編寫安裝程式(1) (轉)
- 使用Delphi,SDK編寫Windows簡單程式 (轉)Windows
- 用 Delphi 編寫 VxD 裝置驅動程式(轉) (轉)
- 用Delphi編寫塗鴉桌面的小程式 (轉)
- 利用DELPHI編寫WINDOWS外殼 (轉)Windows
- Linux網路驅動程式編寫(四)(轉)Linux
- Linux網路驅動程式編寫(三)(轉)Linux
- Linux網路驅動程式編寫(二)(轉)Linux
- Linux網路驅動程式編寫(一)(轉)Linux
- 用Delphi編寫點對點傳檔案程式(1) (轉)
- 用Delphi編寫點對點傳檔案程式(2) (轉)
- 利用Delphi編寫IE擴充套件 (轉)套件
- 編寫網路尋呼機 (轉)
- 排除Delphi5中編寫COM+程式的一個錯誤 (轉)
- 在Delphi中編寫控制元件的基本方法 (轉)控制元件
- 利用Delphi編寫Windows外殼擴充套件 (轉)Windows套件
- 在Delphi中編寫控制元件的基本方法(1) (轉)控制元件
- Delphi源程式格式書寫規範 (轉)
- 初學 Delphi 嵌入彙編[26] - 大小寫字母轉換
- 使用Delphi呼叫C++編寫的DLLC++
- 用VB編寫網路尋呼機(1) (轉)
- 用VB編寫網路尋呼機(2) (轉)
- Delphi使用VB編寫的ActiveX控制元件全攻略 (轉)控制元件
- 利用Python的SocketServer框架編寫網路服務程式PythonServer框架
- 利用Delphi編寫IE擴充套件套件
- 防止用DeDe軟體反編譯delphi程式 (轉)編譯
- 在DELPHI程式中撥號上網 (轉)
- 編寫易讀的程式碼 (轉)
- Delphi寫小執行程式行程
- Delphi的元件讀寫機制(一) (轉)元件
- Delphi的元件讀寫機制(二) (轉)元件
- Delphi的元件讀寫機制(三) (轉)元件
- 一個用delphi寫的整合彙編與api的簡單的視窗程式API
- (轉載)編寫高效的jQuery程式碼jQuery
- 理解 TCP/IP 網路棧 & 編寫網路應用TCP
- Delphi編碼標準——元件命名 (轉)元件
- 《用Python寫網路爬蟲》--編寫第一個網路爬蟲Python爬蟲