asp作品保護(hù)方案
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
[p]自從asp(active server pages)問(wèn)世以來(lái),因其可以創(chuàng)建健壯易于維護(hù)、與平臺(tái)無(wú)關(guān)的應(yīng)用系統(tǒng),asp技術(shù)受到了越來(lái)越多網(wǎng)絡(luò)程序員的喜愛(ài),使用asp從事web開(kāi)發(fā)的人也越來(lái)越多。但asp只是一種非編譯型的、在服務(wù)端運(yùn)行的腳本語(yǔ)言,采用明文(plain text)方式來(lái)編寫(xiě),即使采用了asp加密程序?qū)sp源碼進(jìn)行加密,也不一定能保證發(fā)布到運(yùn)行環(huán)境中去的asp應(yīng)用程序不被非法拷貝。對(duì)于高權(quán)限的管理員,可以輕而易舉從服務(wù)器端拷貝出asp程序應(yīng)用到別的非授權(quán)網(wǎng)站。這樣給asp應(yīng)用商業(yè)化帶來(lái)了一定的困難。如何有效保護(hù)開(kāi)發(fā)出來(lái)的asp程序,本文基于磁盤(pán)序列號(hào)產(chǎn)生的隨機(jī)性,結(jié)合微軟官方免費(fèi)提供的asp腳本加密程序screnc.exe,很好地解決了這個(gè)問(wèn)題。 [br]磁盤(pán)序列號(hào),簡(jiǎn)稱(chēng)磁盤(pán)id,是對(duì)磁盤(pán)進(jìn)行格式化時(shí)隨機(jī)產(chǎn)生的磁盤(pán)標(biāo)識(shí)信息,是一個(gè)卷序列號(hào)。同一機(jī)器兩次格式化隨機(jī)產(chǎn)生固定格式的序列號(hào)相同幾率幾乎為零, dos的后期版本和windows、winnt均采用了這種磁盤(pán)標(biāo)識(shí)方式,因而磁盤(pán)序列號(hào)常被運(yùn)用用于商業(yè)化軟件進(jìn)行加密使用。從windows9.x切換到ms-dos方式,鍵入dir命令后回車(chē),屏幕出現(xiàn)當(dāng)前卷標(biāo)序列號(hào)信息,這個(gè)類(lèi)似"0a48-1cd7"的序列號(hào)是一個(gè)16進(jìn)制數(shù)。一些限期使用的軟件,在使用期限到了之后,會(huì)要求使用者在線申請(qǐng)新的授權(quán)序列號(hào)(使用許可)。這種授權(quán)序列號(hào)相當(dāng)一部分是采用了靜態(tài)磁盤(pán)序列號(hào)結(jié)合時(shí)間產(chǎn)生的。安裝完畢之后的軟件,程序即使被非法拷貝到非初始安裝環(huán)境中,也不能使用。 [/p]
[p][br]上述思想用vc、vb及deliphi編程語(yǔ)言都容易實(shí)現(xiàn),那么,在asp中又如何實(shí)現(xiàn)呢?vbscript作為一種健壯的、安全的用戶(hù)語(yǔ)言,是受客戶(hù)機(jī)系統(tǒng)限制的,不能處理客戶(hù)機(jī)上api的調(diào)用,也不能直接操縱客戶(hù)機(jī)上的文件和文件系統(tǒng)之外的控件。因而本文采用vbscript并結(jié)合asp內(nèi)置組件filesystem來(lái)實(shí)現(xiàn)上述思想。 以下程序根據(jù)具體情況略加修改,可以應(yīng)用于實(shí)際的asp應(yīng)用系統(tǒng)。 [/p] [p]作為講解實(shí)例,本文用到access數(shù)據(jù)庫(kù)安全機(jī)制,實(shí)際應(yīng)用中,可以用其它格式的文件存放的數(shù)據(jù)。為便于闡述,我們先建一個(gè)access數(shù)據(jù)庫(kù)id.mdb(密碼為"kxj"),內(nèi)建一個(gè)driveinfo表,數(shù)據(jù)結(jié)構(gòu)如下: [/p] [p]id(自動(dòng)編號(hào)) ;[br]serno(文本,12,磁盤(pán)序列號(hào)(10進(jìn)制)) ;[br]wrimark(數(shù)字,1,寫(xiě)盤(pán)標(biāo)志,)。[/p] [p][br]說(shuō)明 [/p] [p]wrimark 值為0代表合法用戶(hù)未安裝系統(tǒng),值為1代表該系統(tǒng)已安裝。當(dāng)值為1且序列號(hào)與當(dāng)前盤(pán)不符時(shí),則判定為非法拷貝用戶(hù)。 [/p] [p]初始化時(shí)先定義一個(gè)新記錄,各字段初始值分別為1,12345678,0。 [/p] [p]在同一目錄下,例如c:interpubwwwroot下,放置首頁(yè)default.asp,合法用戶(hù)首頁(yè)success.asp,非法安裝用戶(hù)提示頁(yè)fail.htm及id.mdb序列號(hào)存放庫(kù)。 [/p] [p]各asp文件的編寫(xiě)操作如下: [/p] [p]1、用frontpage(或notepad),新建一個(gè)asp文件default.asp,錄入以下程序代碼: [/p] [p]<html>[br]<head>[br]<title>sample</title>[br]</head>[br]<% dim conn,fs,f[br]set conn = server.createobject("adodb.connection")[br]conn.open "driver={microsoft access driver (*.mdb)};uid=;pwd=kxj;dbq="&server.mappath("id.mdb")[br]set fs=server.createobject("scripting.filesystemobject")[br]testdrive=server.mappath("/driveinfo.asp")[br]'通過(guò)mappath獲得當(dāng)前盤(pán)盤(pán)符[br]testdrive=left(testdrive,3)[br]set f=fs.getdrive(testdrive)[br]'調(diào)用getdrive方法,將驅(qū)動(dòng)器賦予一個(gè)變量[br]mysql="select * from driveinfo where id=1" [br]set rscheck = server.createobject("adodb.recordset")[br]rscheck.open mysql,conn,1,1[br]fser=trim(f.serialnumber)[br]'獲得當(dāng)前盤(pán)序列號(hào)[br]strserno=trim(rscheck.fields("serno"))[br]strmark=rscheck.fields("wrimark")[br]if strserno<>fser and strmark=0 then[br]'若是首次安裝,則置寫(xiě)盤(pán)標(biāo)志為1[br]session("pass")=true[br]'定義用戶(hù)session,并置為全局asp文檔標(biāo)識(shí)變量[br]set rsmain = server.createobject("adodb.recordset")[br]mysql1="update driveinfo set serno="&fser&", wrimark=1" [br]rsmain.open mysql1,conn,1,2[br]response.write("<a href='success.asp'>setup [br]successful!welcome to access the website!</a>")[br]set rsmain=nothing[br]else [br]if strserno=fser then[br]'若是合法用戶(hù)再次合法進(jìn)入[br]session("pass")=true[br]response.write("<a href='success.asp'>you are authorized by the website manager,welcome to access !</a>")[br]else[br]'非法拷貝用戶(hù)[br]session("pass")=false[br]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>")[br]end if[br]end if [br]response.write("<br>") [br]response.write("volume serial number in drive "&testdrive)[br]response.write(f.serialnumber)[br]response.write("<br>")[br]response.write("volume hex serial number in drive "&testdrive)[br]response.write(hex(f.serialnumber))[br]response.write("<br>")[br]'作為演示,本程序把當(dāng)前盤(pán)序列號(hào)列出來(lái)(16進(jìn)制)[br]set f=nothing[br]set fs=nothing[br]%>[br]</html>[/p] [p][br]2、在合法用戶(hù)可以訪問(wèn)的各個(gè)asp文件頭部,添加如下代碼: [/p] [p]<% if session("pass")=false then[br]'對(duì)session變量進(jìn)行判定,非法則跳出本asp文件[br]response.redirect("fail.htm")[br]end if [br]%>[/p] [p][br]3、用asp加密程序(例如微軟公司的screnc.exe,別的asp加密程序也可以)對(duì)各個(gè)asp文件進(jìn)行加密。 [/p] [p]在dos狀態(tài)下運(yùn)行screnc -l vbscript source.asp destination.asp,即把源文件source.asp生成了包含密文asp腳本的新文件destination.asp。screnc.exe可以在微軟公司站點(diǎn)([url=http://microsoft.com]http://microsoft.com[/url]免費(fèi)下載)。 [br]以上程序代碼在簡(jiǎn)體中文nt4.0、iis3.0及簡(jiǎn)體中文pwin9.8、pws4.0下通過(guò)。[/p] 該文章在 2010/7/8 0:36:07 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |