自從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)題。
<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") '通過(guò)MapPath獲得當(dāng)前盤(pán)盤(pán)符 testDrive=Left(testDrive,3) set f=fs.getdrive(testDrive) '調(diào)用GetDrive方法,將驅(qū)動(dòng)器賦予一個(gè)變量 MySQL="SELECT * From driveinfo where id=1" set rsCheck = Server.CreateObject("ADODB.Recordset") rsCheck.open Mysql,conn,1,1 FSER=trim(f.serialnumber) '獲得當(dāng)前盤(pán)序列號(hào) StrSerno=trim(rsCheck.fields("SERNO")) StrMark=rsCheck.fields("WRIMARK") if StrSerno<>FSER and StrMark=0 then '若是首次安裝,則置寫(xiě)盤(pán)標(biāo)志為1 session("pass")=true '定義用戶(hù)Session,并置為全局ASP文檔標(biāo)識(shí)變量 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 '若是合法用戶(hù)再次合法進(jìn)入 session("pass")=true response.write("<a href='success.asp'>YOU ARE AUTHORIZED BY THE WEBSITE MANAGER,WELCOME TO ACCESS !</a>") else '非法拷貝用戶(hù) 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>") '作為演示,本程序把當(dāng)前盤(pán)序列號(hào)列出來(lái)(16進(jìn)制) set f=nothing set fs=nothing %> </html>
2、在合法用戶(hù)可以訪問(wèn)的各個(gè)ASP文件頭部,添加如下代碼:
<% if Session("pass")=false then '對(duì)Session變量進(jìn)行判定,非法則跳出本ASP文件 response.redirect("fail.htm") end if %>