ISAPI篩選器及對ASP原始檔的保護

2021-04-01 18:45:22 字數 4042 閱讀 4267

劉玉林

曹二堂(河北經貿大學)

摘要:本文介紹了利用

isapi

篩選器保護

asp原始檔的方法,並給出乙個例項。

關鍵字iis

,isapi

,asp

,**保護

1

引言

asp作為一種網路開發的指令碼語言,由於程式設計簡單、功能強大,得到了廣泛的應用。然而,由於asp指令碼是採用明文(plain text)方式來編寫的,所以應用開發商辛苦開發出來的asp應用程式,一旦發布到執行環境中去後,就很難確保這些"源**"不會被流傳出去。這樣就產生了如何有效地保護開發出來的asp指令碼源**的需求。

對於asp源**保護的常用方法主要有兩種:

(2)使用asp元件,即asp檔案中只編寫盡可能少的源**,將核心**指令碼部分被封裝到乙個com/dcom元件,並在asp指令碼中建立該元件,進而呼叫相應的方法。因此,需要在開發asp指令碼應用之前就可按此思路來開發,或者直接用asp 指令碼快速開發出原型系統後,針對需要保護、加密的重要指令碼用com/dcom元件來重新開發、實現並替換。但該方法給開發除錯帶來諸多不便,因此一般只對最主要的**採用這種方式。

鑑於上述兩種方法的不足,本文研究了使用isapi的iis篩選器的方法。該方法的基本思想是,開發過程中仍然使用按源**方式進行,程式發布前將指令碼進行加密處理,程式發布後給iis新增乙個篩選器。利用篩選器與iis的緊密結合特性,在asp.dll讀取指令碼前還原加密程式。其特點是,指令碼的開發與加密分離,加密方式可以自行決定,篩選器只能起到還原密文的功能。

2isapi

篩選器的構成

isapi

篩選器是微軟針對

iis提供的專用

api,提供了對

iis

的縱向擴充功能。

isapi

篩選器和

伺服器執行在同一位址空間,並且可以訪問可由

伺服器使用的所有資源。

isapi

篩選器隨

iis啟動而載入,客戶機的每個

請求都會導致篩選器執行,並且

iis處理

請求的各個階段都會產生乙個通知,從而呼叫篩選器處理相應事件。

isapi

篩選器iis

伺服器

處理連線請求標題

處理連線請求資料

url對映成物理路徑

授權使用者(如果需要)

組織資料

寫入日誌

結束連線

onreadrawdata

onpreprocheaders

onurlmap

onauthentication

onsendrawdata

onendofnetsession

傳送給客戶機

onlog

圖1

顯示了iis

伺服器從接收到客戶機請求資料到結束連線整個過程中

iis的處理步驟,以及篩選器可以獲得的通知和處理方式。

圖1 iis

伺服器與篩選器工作流程

使用mfc

的chttpfilter

類建立篩選器來管理

isapi

伺服器的傳入和輸出資料時,使用兩個入口點成員函式

和chttpfilter::httpfilterproc 。⑴

getfilterversion

當iis

啟動時,它讀取該值並載入篩選器。然後它呼叫

交換版本資訊、確定請求的事件及指定傳遞請求事件的優先順序。本文用到兩個確定請求的事件,即

sf_notify_url_map

和sf_notify_send_raw_data

,用於將邏輯

url

對映到物理路徑時獲得加密檔案和將原始資料從伺服器傳送到客戶端之前通知篩選器以刪除解密檔案

當事件發生時,伺服器通過呼叫篩選器的

入口點通知篩選器。當

被呼叫時,接收到的通知將確定將要呼叫哪乙個

成員函式。通過重寫

成員函式時,可以使篩選器以特定的方式處理資料。本文涉及兩個成員函式。

onurlmap

在伺服器將邏輯

url

對映到物理路徑時通知篩選器執行。

onsendrawdata

在將原始資料從伺服器傳送到客戶端之前通知篩選器執行。

3

實現asp

源**保護過程

asp的開發除錯完成後可以通過自行設計的加密方法進行加密,通過加密變為密文檔案。客戶機訪問密文檔案時,首先通過

iis篩選器解密還原為

asp源**,然後再將

asp源**交給

asp直譯器解釋執行,該過程在伺服器將邏輯

url

對映到物理路徑時完成,即重寫

的成員函式

onurlmap

。處理方法如下:

篩選器得到通知後,判斷是否

asp請求,決定是否對檔案處理

cstring isasp,ext;

isasp=pmapinfo->pszphysicalpath;//

獲得密文位置

ext=isasp.right(3);ext.makeupper() ;

if(!(ext=="asp")) return sf_status_req_next_notification;

開啟獲得請求的

asp密文檔案

cfile file_i;

if(!file_i.open(pstrphyspath,cfile::moderead))

num=file_i.getlength();

num=file_i.read(str,num);

file_i.close();

對密文檔案解密

decrypt(str) ;//

呼叫解密函式

將解密後的原始碼儲存在一臨時檔案中,檔名隨機生成,可以存放在系統臨時目錄下。

cfile file_o;

if(!file_o.open(pt,cfile::modereadwrite |cfile::modecreate))

file_o.write( str, num );

file_o.close();

修改對映的物理路徑為解密後的臨時檔案

int n1,n2;

n1=pt.getlength(); //pt—

解密檔案路徑

n2=pmapinfo->cbpathbuff;

for(int i=0;i

for(int j=n1;j

的成員函式

onsendrawdata

4

結論

由於asp

程式的開發與加密

分離後,

asp原始檔的保護措施不會影響

asp程式

的開發,解密是在iis篩選器中進行的,因此也不需要在加密檔案時對原始檔做任何特殊處理,該方法簡單易行,更適合於對現有系統的加密保護。

參考文獻

1.微軟公司

msdn library 2.

(美)k.clements

等isapi

實用技術指南,清華大學出版社

1998.7

3.潘愛民

王國印譯

visual c++

技術內幕,清華大學出版社

1999.1

ISAPI篩選器及對ASP原始檔的保護

isapi篩選器及對asp原始檔的保護 劉玉林曹二堂 河北經貿大學 摘要 本文介紹了利用 isapi 篩選器保護 asp原始檔的方法,並給出乙個例項。關鍵字iis,isapi asp 保護 1引言 asp作為一種網路開發的指令碼語言,由於程式設計簡單 功能強大 得到了廣泛的應用。然而,由於 asp指...

ISAPI篩選器及對ASP原始檔的保護

isapi篩選器及對asp原始檔的保護 劉玉林曹二堂 河北經貿大學 摘要 本文介紹了利用 isapi 篩選器保護 asp原始檔的方法,並給出乙個例項。關鍵字iis,isapi asp 保護 1引言 asp作為一種網路開發的指令碼語言,由於程式設計簡單 功能強大 得到了廣泛的應用。然而,由於 asp指...

ISAPI篩選器及對ASP原始檔的保護

isapi篩選器及對asp原始檔的保護 劉玉林曹二堂 河北經貿大學 摘要 本文介紹了利用 isapi 篩選器保護 asp原始檔的方法,並給出乙個例項。關鍵字iis isapi asp 保護 1引言 asp作為一種網路開發的指令碼語言,由於程式設計簡單 功能強大 得到了廣泛的應用。然而,由於 asp指...