您的位置:首頁 > 網絡編程 > ASP

asp作品保護方案

日期:2006-04-03 00:03:00 點擊: 來自: 作者:


自從asp(active server pages)問世以來,因其可以創建健壯易于維護、與平臺無關的應用系統,asp技術受到了越來越多網絡程序員的喜愛,使用asp從事web開發的人也越來越多。但asp只是一種非編譯型的、在服務端運行的腳本語言,采用明文(plain text)方式來編寫,即使采用了asp加密程序對asp源碼進行加密,也不一定能保證發布到運行環境中去的asp應用程序不被非法拷貝。對于高權限的管理員,可以輕而易舉從服務器端拷貝出asp程序應用到別的非授權網站。這樣給asp應用商業化帶來了一定的困難。如何有效保護開發出來的asp程序,本文基于磁盤序列號產生的隨機性,結合微軟官方免費提供的asp腳本加密程序screnc.exe,很好地解決了這個問題。
磁盤序列號,簡稱磁盤id,是對磁盤進行格式化時隨機產生的磁盤標識信息,是一個卷序列號。同一機器兩次格式化隨機產生固定格式的序列號相同幾率幾乎為零, dos的后期版本和windows、winnt均采用了這種磁盤標識方式,因而磁盤序列號常被運用用于商業化軟件進行加密使用。從windows9.x切換到ms-dos方式,鍵入dir命令后回車,屏幕出現當前卷標序列號信息,這個類似"0a48-1cd7"的序列號是一個16進制數。一些限期使用的軟件,在使用期限到了之后,會要求使用者在線申請新的授權序列號(使用許可)。這種授權序列號相當一部分是采用了靜態磁盤序列號結合時間產生的。安裝完畢之后的軟件,程序即使被非法拷貝到非初始安裝環境中,也不能使用。

上述思想用vc、vb及deliphi編程語言都容易實現,那么,在asp中又如何實現呢?vbscript作為一種健壯的、安全的用戶語言,是受客戶機系統限制的,不能處理客戶機上api的調用,也不能直接操縱客戶機上的文件和文件系統之外的控件。因而本文采用vbscript并結合asp內置組件filesystem來實現上述思想。 以下程序根據具體情況略加修改,可以應用于實際的asp應用系統。

作為講解實例,本文用到access數據庫安全機制,實際應用中,可以用其它格式的文件存放的數據。為便于闡述,我們先建一個access數據庫id.mdb(密碼為"kxj"),內建一個driveinfo表,數據結構如下:

id(自動編號) ;
serno(文本,12,磁盤序列號(10進制)) ;
wrimark(數字,1,寫盤標志,)。

說明

wrimark 值為0代表合法用戶未安裝系統,值為1代表該系統已安裝。當值為1且序列號與當前盤不符時,則判定為非法拷貝用戶。

初始化時先定義一個新記錄,各字段初始值分別為1,12345678,0。

在同一目錄下,例如c:/interpub/wwwroot下,放置首頁default.asp,合法用戶首頁success.asp,非法安裝用戶提示頁fail.htm及id.mdb序列號存放庫。

各asp文件的編寫操作如下:

1、用frontpage(或notepad),新建一個asp文件default.asp,錄入以下程序代碼:

<html>
<head>
<title>sample</title>
</head>
<% dim conn,fs,f
set conn = server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};uid=;pwd=kxj;dbq="&server.mappath("id.mdb")
set fs=server.createobject("scripting.filesystemobject")
testdrive=server.mappath("/driveinfo.asp")
'通過mappath獲得當前盤盤符
testdrive=left(testdrive,3)
set f=fs.getdrive(testdrive)
'調用getdrive方法,將驅動器賦予一個變量
mysql="select * from driveinfo where id=1"
set rscheck = server.createobject("adodb.recordset")
rscheck.open mysql,conn,1,1
fser=trim(f.serialnumber)
'獲得當前盤序列號
strserno=trim(rscheck.fields("serno"))
strmark=rscheck.fields("wrimark")
if strserno<>fser and strmark=0 then
'若是首次安裝,則置寫盤標志為1
session("pass")=true
'定義用戶session,并置為全局asp文檔標識變量
set rsmain = server.createobject("adodb.recordset")
mysql1="update driveinfo set serno="&fser&", wrimark=1"
rsmain.open mysql1,conn,1,2
response.write("<a href='success.asp'>setup
successful!welcome to access the website!</a>")
set rsmain=nothing
else
if strserno=fser then
'若是合法用戶再次合法進入
session("pass")=true
response.write("<a href='success.asp'>you are authorized by the website manager,welcome to access !</a>")
else
'非法拷貝用戶
session("pass")=false
response.write("<a href='fail.htm'>it is illegal to copy the website's asp document.you are not rigrt to use the program.</a>")
end if
end if
response.write("<br>")
response.write("volume serial number in drive "&testdrive)
response.write(f.serialnumber)
response.write("<br>")
response.write("volume hex serial number in drive "&testdrive)
response.write(hex(f.serialnumber))
response.write("<br>")
'作為演示,本程序把當前盤序列號列出來(16進制)
set f=nothing
set fs=nothing
%>
</html>

2、在合法用戶可以訪問的各個asp文件頭部,添加如下代碼:

<% if session("pass")=false then
'對session變量進行判定,非法則跳出本asp文件
response.redirect("fail.htm")
end if
%>

3、用asp加密程序(例如微軟公司的screnc.exe,別的asp加密程序也可以)對各個asp文件進行加密。

在dos狀態下運行screnc -l vbscript source.asp destination.asp,即把源文件source.asp生成了包含密文asp腳本的新文件destination.asp。screnc.exe可以在微軟公司站點(http://www.microsoft.com免費下載)。
以上程序代碼在簡體中文nt4.0、iis3.0及簡體中文pwin9.8、pws4.0下通過。

  
擴展信息 Expand Information
More..素材圖片 Picture Navigation
相關鏈接 Correlation Link
最新ASP New Article
ASP熱門 Class Hot
ASP推薦 Class Commend
版權所有:中國網站資源 2005- 未經授權禁止復制或建立鏡像 This Site Tech:XHTML+DIV+CSS+Javascript
CopyRight ® 2005- www.jingyuxinyu.com online services. all rights reserved. ICP06016627
Optimized to 1024x768 to Firefox,Netscape,Opera,MS-IE6+.
fun88体育 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>