isapi篩選器及對asp原始檔的保護
劉玉林曹二堂
(河北經貿大學)
摘要:本文介紹了利用
isapi
篩選器保護
asp原始檔的方法,並給出乙個例項。
關鍵字iis,
isapi
,asp
,**保護
1引言
asp作為一種網路開發的指令碼語言,由於程式設計簡單、功能強大
,得到了廣泛的應用。然而,由於
asp指令碼是採用明文(
plain text
)方式來編寫的,所以應用開發商辛苦開發出來的
asp應用程式,一旦發布到執行環境中去後,就很難確保這些
"源**
"不會被流傳出去。這樣就產生了如何有效地保護開發出來的
asp指令碼源**的需求。
對於asp源**保護的常用方法主要有兩種:
(1)screnc.exe
檔案,這是乙個執行在
dos promapt
的命令工具。使用該程式加密後,
asp指令碼變成不可閱讀的密文。加密後的
asp檔案在
iis5.0
下可直接執行,因而使用非常方便。但是,在微軟提供加密程式後很快就出現了解密程式,解密程式能完全恢復源**,使加密形同虛設,不能說不是一種遺憾。
(2)使用asp
元件,即
asp檔案中只編寫盡可能少的源**,將核心**指令碼部分被封裝到乙個
元件,並在
asp指令碼中建立該元件,進而呼叫相應的方法。因此,需要在開發
asp指令碼應用之前就可按此思路來開發,或者直接用
asp
指令碼快速開發出原型系統後,針對需要保護、加密的重要指令碼用
元件來重新開發、實現並替換。但該方法給開發除錯帶來諸多不便,因此一般只對最主要的**採用這種方式。
鑑於上述兩種方法的不足,本文研究了使用
isapi
的iis
篩選器的方法。該方法的基本思想是,開發過程中仍然使用按源**方式進行,程式發布前將指令碼進行加密處理,程式發布後給
iis新增乙個篩選器。利用篩選器與
iis的緊密結合特性,在
asp.dll
讀取指令碼前還原加密程式。其特點是,指令碼的開發與加密分離,加密方式可以自行決定,篩選器只能起到還原密文的功能。
2 isapi篩選器的構成
isapi
篩選器是微軟針對
iis提供的專用
api,提供了對
iis
的縱向擴充功能。
isapi
篩選器和
伺服器執行在同一位址空間,並且可以訪問可由
伺服器使用的所有資源。
isapi
篩選器隨
iis啟動而載入,客戶機的每個
請求都會導致篩選器執行,並且
iis處理
請求的各個階段都會產生乙個通知,從而呼叫篩選器處理相應事件。圖1
顯示了iis
伺服器從接收到客戶機請求資料到結束連線整個過程中
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原始檔的方法,並給出乙個例項。關鍵字iis isapi asp 保護 1 引言 asp作為一種網路開發的指令碼語言,由於程式設計簡單 功能強大,得到了廣泛的應用。然而,由於asp指令碼是採用明文 plain text ...
ISAPI篩選器及對ASP原始檔的保護
isapi篩選器及對asp原始檔的保護 劉玉林曹二堂 河北經貿大學 摘要 本文介紹了利用 isapi 篩選器保護 asp原始檔的方法,並給出乙個例項。關鍵字iis isapi asp 保護 1引言 asp作為一種網路開發的指令碼語言,由於程式設計簡單 功能強大 得到了廣泛的應用。然而,由於 asp指...