999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

回調(diào)機制在安全審計日志中的運用

2008-12-31 00:00:00李建輝鄧朝暉
電腦知識與技術 2008年24期

摘要:在一個完整的安全審計系統(tǒng)里面,日志系統(tǒng)是一個非常重要的功能組成部分。它可以記錄下系統(tǒng)所產(chǎn)生的所有行為,并按照某種方式保存下來。我們可以使用日志系統(tǒng)所記錄的信息為系統(tǒng)進行排錯,優(yōu)化系統(tǒng)的性能。在安全領域,日志系統(tǒng)的重要地位尤甚,可以說是安全審計方面最主要的工具之一。該文就介紹回調(diào)機制在系統(tǒng)日志中的運用。

關鍵詞:系統(tǒng)日志;回調(diào)機制;松耦合

中圖分類號:TP309文獻標識碼:A文章編號:1009-3044(2008)24-1150-02

The Application of Callback Mechanism in the Security System Log

LI Jian-hui1, DENG Zhao-hui2

(1.Yueyang Radio and TV University,Yueyang 414000,China;2.Chenzhou Vocational Technical College,Chenzhou 423000,China)

Abstract: Inside a complete information system, the diary system is an extremely important function constituent. Under it may record all behaviors which the system produces, and defers to some way to preserve. We may use the information which the diary system records for the system to carry on misprinting, the optimized system performance. In the security domain, the diary system status is more important, it is one of safe audit aspect most main tools. This article introduced adjusts callback utilization in the diary system.

Key words: systems log;call-back;lax-coupling

系統(tǒng)的日志記錄提供了對系統(tǒng)活動的詳細審計,這些日志用于評估、審查系統(tǒng)的運行環(huán)境和各種操作。對于一般情況,日志記錄包括記錄用戶登錄時間、登錄地點、操作內(nèi)容等項目,在一個完整的安全審計系統(tǒng)里面,日志系統(tǒng)是一個非常重要的功能組成部分。

1 問題地提出

通常,借助于面向?qū)ο蟮姆治觥⒃O計和實現(xiàn)技術,開發(fā)者可以將用戶的需求轉(zhuǎn)換為軟件系統(tǒng)中的模塊,從而很自然地完成從需求到軟件的轉(zhuǎn)換。但是,在軟件系統(tǒng)中,往往有很多模塊,或者很多類共享某個行為,或者是某個行為存在于軟件的各個模塊中,這個行為可以看作是“橫向”存在于軟件之中,它所關注的是軟件的各個部分的一些共有的行為,而且,這種行為在很多情況下不屬于業(yè)務邏輯的一部分(如圖1),系統(tǒng)日志的記錄就屬于這種行為。這種操作并不是業(yè)務邏輯調(diào)用的必須部分,但是,開發(fā)者卻往往不得不在代碼中顯式進行調(diào)用,并承擔由此帶來的后果(例如,當日志記錄的接口發(fā)生變化時,必須對調(diào)用代碼進行修改)。這種問題,使用傳統(tǒng)的面向?qū)ο蟮姆椒ㄊ呛茈y解決的。本文就討論在Delphi中如何將這些“橫切面”與業(yè)務邏輯代碼相分離,從而得到松耦合軟件結(jié)構(gòu)以及更好的性能、穩(wěn)定性等方面的好處。

圖1 業(yè)務邏輯示意圖

2 分析問題

對于日志系統(tǒng),為了得到好的程序結(jié)構(gòu),通常使用面向?qū)ο蟮姆椒ǎ瑢⑾到y(tǒng)日志過程封裝在一個類中,這個類包含了一個系統(tǒng)日志的代碼,例如:

TLog=class//日志類

procedure exepre(Sender: TObject);//執(zhí)行業(yè)務邏輯前的系統(tǒng)日志

procedure exeback(Sender: TObject);//執(zhí)行業(yè)務邏輯后的系統(tǒng)日志end;

TBusiness =class(TLog)//業(yè)務邏輯類

procedure Business (Sender: TObject);//業(yè)務邏輯

end;

……//處理業(yè)務邏輯

exeback(Sender);//處理業(yè)務邏輯后記錄系統(tǒng)日志

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

mybusiness:= TBusiness.Create();

mybusiness. Business (Memo1);//調(diào)用業(yè)務邏輯

end;

procedure TLog.exepre(Sender: TObject);

begin

TMemo(Sender).Lines. Add('業(yè)務邏輯開始')

end;

procedure TLog.exeback(Sender: TObject);

begin

TMemo(Sender).Lines. Add('業(yè)務邏輯結(jié)束')

end;

end.

通常情況下,實現(xiàn)日志系統(tǒng)的最直接的方法:創(chuàng)建一個類,將日志功能放在其中,并讓所有需要日志功能的類繼承這個類。這樣的方法有如下問題:

1) 如果這個需求是后期提出的,需要修改的地方就會分散在多達數(shù)十個分散的文件中。巨大的修改量,無疑會增加出錯的幾率,并且加大系統(tǒng)維護的難度。

2) 代碼混亂:軟件系統(tǒng)中的模塊可能要同時兼顧幾個方面的需要。舉例來說,開發(fā)者經(jīng)常要同時考慮業(yè)務邏輯和日志問題,兼顧各方面的需要會導致兩種實現(xiàn)元素同時出現(xiàn),從而引起代碼混亂。

3) 緊耦合:使用這種方法,我們必須在業(yè)務邏輯代碼必須繼承自TLog類,這就造成了業(yè)務邏輯代碼同TLog類的緊耦合,這意味著,當TLog發(fā)生變化時,例如,當系統(tǒng)進化需要對exepre和exeback的方法進行改動時,可能會影響到所有引用代碼。

3 解決方案

為了解決上述問題,考慮引入Delphi中的回調(diào)機制[1]。回調(diào)機制的基本思想就是調(diào)用者在初始化一個對象(這里的對象是泛指,包括OOP中的對象、全局函數(shù)等)時,將一些參數(shù)傳遞給對象,同時將一個調(diào)用者可以訪問的函數(shù)地址傳遞給該對象。這個函數(shù)就是調(diào)用者和被調(diào)用者之間的一種通知約定,當約定的事件發(fā)生時,被調(diào)用者(一般會包含一個工作線程)就會按照回調(diào)函數(shù)地址調(diào)用該函數(shù)。如下是回調(diào)函數(shù)的一個簡單實例:

1) 回調(diào)函數(shù)類型定義:

TCalcFunc=function (a:integer;b:integer):integer;

2) 按照回調(diào)函數(shù)的格式自定義函數(shù)的實現(xiàn),如

function Add(a:integer;b:integer):integer

begin

result:=a+b;

end;

function Sub(a:integer;b:integer):integer

begin

result:=a-b;

end;

3) 回調(diào)的使用

function Calc(mycalc:TcalcFunc;a:integer;b:integer):integer

begin

mycalc(a,b);……………………………..③

end;

4) 下面,我們就可以在我們的程序里按照需要調(diào)用這兩個函數(shù)了

c:=calc(@add,a,b);//c=a+b…………………①

c:=calc(@sub,a,b);//c=a-b………………….②

通過上面的實例我們可以看出:程序中在①②處分別兩次調(diào)用了calc()函數(shù),第一次采用add()函數(shù)的地址和兩個數(shù)作為參數(shù),第二次采用sub()函數(shù)的地址和兩個數(shù)作為參數(shù)。相當于通過調(diào)用一個函數(shù)calc(),傳遞了不同的函數(shù)地址參數(shù),得到了不同函數(shù)的調(diào)用。

以上是回調(diào)函數(shù)的的基本思想,如果將系統(tǒng)日志操作語句放在③處的上面和下面,這樣在不改動業(yè)務邏輯add()、sub()函數(shù)的基礎上增加了系統(tǒng)日志。下面將本文第一個例子采用回調(diào)機制重新改寫,結(jié)果如下。

為了實現(xiàn)松散耦合結(jié)構(gòu),利用兩個類分別實現(xiàn)日志功能和業(yè)務邏輯。

type

THDProcedure = procedure(Sender: TObject) of object;

TLog=class//日志類

procedure Mylog(mypro:THDProcedure;Sender: TObject);//處理系統(tǒng)日志

end;

TBusiness=class //業(yè)務邏輯類

…….. //處理業(yè)務邏輯

End;

procedure TForm1.FormCreate(Sender: TObject);

begin

rz:=TLog.Create();

dz:=TBusiness.Create();

end;

end.(下轉(zhuǎn)第1154頁)

(上接第1151頁)

以上日志類和業(yè)務邏輯類的定義中,需要說明的是:

1) 回調(diào)函數(shù)類型定義:THDProcedure = procedure(Sender: TObject) of object,這個定義中的參數(shù)必須與業(yè)務邏輯類中的處理業(yè)務邏輯方法的參數(shù)一致。

2) 因為定義的回調(diào)函數(shù)不是一個普通的函數(shù),它是業(yè)務邏輯類對象的方法,所以of object關鍵字是表示這個方法屬于對象方法(不是類方法),也就是說這個函數(shù)類型的參數(shù)列表中將包括隱含的self參數(shù)(其中參數(shù)為對象方法中要使用的對象指針)。

3) 業(yè)務邏輯類中的處理業(yè)務邏輯方法必須聲明為Published[2],否則就會發(fā)生錯誤,這是為什么呢?因為對象方法的地址不能簡單的通過“@”符號得到,必須使用TObject.MethodAddress方法,MethodAddress 使用RTTI通過對象方法名獲取一個對象方法的地址,但MethodAddress方法只能取出Published型的方法,如果沒有聲明為Published,則MethodAddress(對象方法名)會返回空,導致錯誤。

4) Routine變量是方法指針,它實際上是一對指針:第一個存儲方法的地址,第二個存儲方法所屬的對象的引用。

通過利用回調(diào)機制的重新改寫,系統(tǒng)主要由三個大模塊組成:日志模塊(Tlog類)、業(yè)務邏輯模塊(Tbusiness類)和組合模塊(TForm1類)。那么系統(tǒng)的開發(fā)包括三個清晰的開發(fā)步驟:

第一步:功能分解:本步驟中,把核心模塊級和系統(tǒng)模塊級的功能分離開來,就上述的例子來說明,即可以分解出兩個功能模塊:核心級的業(yè)務邏輯功能模塊、系統(tǒng)級的日志功能模塊。

第二步:功能實現(xiàn):各自獨立的實現(xiàn)這些功能模塊,仍然沿用上面的例子,即實現(xiàn)業(yè)務邏輯處理單元和日志單元。

第三步:功能的重新組合:本步驟中,通過創(chuàng)建一個模塊單元,一方面來指定重組的規(guī)則,另一方面則使用這些信息來構(gòu)建最終系統(tǒng)。以上述例子說明,即指定哪些操作需要記錄。

4 結(jié)論

總而言之,回調(diào)機制不僅可幫助我們解決傳統(tǒng)方法對系統(tǒng)日志操作中出現(xiàn)的代碼后期維護、代碼混亂、緊耦合等問題,它還有更多的優(yōu)勢:

1) 系統(tǒng)容易擴展:由于日志功能模塊和業(yè)務邏輯功能模塊根本不知道彼此的存在,所以很容易通過建立新的功能模塊加入新的功能,使系統(tǒng)易于擴展。

2) 更好的代碼重用性:把每個功能實現(xiàn)為獨立的模塊,模塊之間是松散耦合的。舉例來說,我們可以用另外一個獨立的日志寫入器功能來替換當前的模塊,用于把日志寫入數(shù)據(jù)庫,以滿足不同的日志寫入要求。松散藕合的實現(xiàn)通常意味著更好的代碼重用性。

回調(diào)機制不僅僅可以在系統(tǒng)日志中發(fā)揮重要作用,而且它還可以運用在系統(tǒng)安全、模式匹配的性能分析[3-4]、驗證等方面。

參考文獻:

[1] Steve Teixeira,Xavier Pacheco.Delphi 5開發(fā)人員指南[M].北京:機械工業(yè)出版社,2001.

[2] 耿宏運,陳站林,趙宗福,等.Delphi6組件大全[M].北京:電子工業(yè)出版社,2002.

[3] Bace RG..Intrusion Detection[M].London:Technology Series,Macmillan,2000.

[4] Hammar J,Garcia,Molina H,et al.Extracting semi2 structured information from the Web[J].SIGMOD Record,1997,26(2):18-25.

主站蜘蛛池模板: 日本人妻丰满熟妇区| 国产乱人伦AV在线A| 亚洲日韩久久综合中文字幕| 国产无码网站在线观看| 中文字幕在线不卡视频| 成年人国产视频| 日韩国产 在线| 日韩国产高清无码| 精品国产自| 99人妻碰碰碰久久久久禁片| 亚洲中文字幕无码爆乳| jizz国产在线| 亚洲精品男人天堂| 伊人久久大香线蕉影院| 久久精品亚洲热综合一区二区| 欧美黑人欧美精品刺激| 国产成人亚洲综合a∨婷婷| 日韩毛片免费视频| 国产激情无码一区二区APP | 国产精品护士| 免费全部高H视频无码无遮掩| 美女一级免费毛片| 国产精品极品美女自在线看免费一区二区| 色国产视频| 制服丝袜一区| 精品少妇人妻一区二区| 婷婷激情亚洲| 免费看的一级毛片| 亚洲精品国产成人7777| 精品国产中文一级毛片在线看| 日本黄色a视频| 国产国语一级毛片在线视频| 国产女人18水真多毛片18精品| 女同久久精品国产99国| 最新日韩AV网址在线观看| 亚洲一区精品视频在线| 精品自窥自偷在线看| 伊人五月丁香综合AⅤ| 国产成人免费手机在线观看视频| 免费可以看的无遮挡av无码| 欧美成人国产| 久爱午夜精品免费视频| 一本大道东京热无码av| 国产欧美在线观看一区| 欧美日韩亚洲综合在线观看| 人人91人人澡人人妻人人爽| 激情综合激情| 精品无码国产一区二区三区AV| 亚洲无限乱码一二三四区| 国产美女无遮挡免费视频网站| 国产性精品| 黄色片中文字幕| 无码有码中文字幕| 99热亚洲精品6码| 免费无码一区二区| 中文无码精品A∨在线观看不卡| 福利在线不卡| 国产成+人+综合+亚洲欧美| 搞黄网站免费观看| 激情午夜婷婷| 国产免费精彩视频| 国内精品九九久久久精品| 日韩中文欧美| 中文字幕在线观| 视频一区视频二区中文精品| 久久精品国产精品青草app| 日韩亚洲综合在线| 黄色成年视频| 亚洲成人免费看| 欧美中日韩在线| 久久不卡精品| 国产在线98福利播放视频免费| 国产女同自拍视频| 久久狠狠色噜噜狠狠狠狠97视色 | 中文字幕永久在线观看| 又粗又硬又大又爽免费视频播放| 动漫精品啪啪一区二区三区| 亚洲精品视频免费观看| 久久不卡国产精品无码| 国产精品v欧美| 国产黑丝一区| 日本不卡在线播放|