encode|加密|頁面
一、概述
一直以來,ASP技術受到了越來越多朋友的喜愛,使用ASP從事WEB開發的人也越來越多。ASP一個非常明顯的特徵是頁面在伺服器端經過處理之後發送到瀏覽器中的內容為標準的HTML格式,這樣有效保護了頁面程式的原代碼不被用戶端輕易擷取(當然MS的BUG不斷那是另一回事了。^_^)。但是另一個普遍存在的問題是:
由於ASP頁面是純文字的形式存放,在伺服器端可以輕易看到全部編程邏輯。這樣給ASP應用商業化帶來了一定的困難。解決的方法一般是使用組件技術將編程邏輯封裝入DLL之中,但問題是:
1、如果每段代碼都組件化似乎工作量太大了,也沒有必要。
2、還有很多網友(比如象浪子一樣:-<)根本就不會編寫組件。
在這樣的背景下,微軟推出了Script Encoder1.0。一個命令列的指令碼加密工具。
Script Encoder的特點是:
它只加密頁面中嵌入的指令碼代碼,其他部分,如HTML的TAG仍然保持原樣不變。
處理後的檔案中被加密過的部分為唯讀內容,對加密部分的任何修改都將導致整個加密後的檔案不能使用。Script Encoder加密過的ASP檔案還將使Script Debugger之類的指令碼調試工具失效。
Script Encoder是可以對Client Side Script加密,也可以對Server Side
Script加密。
二、使用簡介
Script Encoder是個命令列工具,執行檔案為SCRENC.EXE。它的操作非常簡
單:
SCRENC [/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] inputfile
outputfile
/s 可選。讓Script Encoder“安靜”的工作,即執行過程
沒有螢幕輸出。(我使用的感覺忽略它,同樣沒有螢幕
輸出。沒什麼用,懶得理了。)
/f 可選。指定輸出檔案是否覆蓋同名輸入檔案。忽略,將
不執行覆蓋。
/xl 可選。是否在.asp檔案的頂部添加@Language指令。忽略,
將添加。
/l defLanguage 可選。指定Script Encoder加密中選擇的預設指令碼語
言。
檔案中不包含這種指令碼語言特性的指令碼將被Script
Encoder
忽略。對於HTML和指令檔來說,JScript為內建預設腳
本語言。對於ASP檔案,VBScript為預設指令碼語言。同時
對於副檔名為.vbs或.js的檔案Script Encoder有自適應
能力。
/e defExtension 可選。指定待加密檔案的副檔名。預設狀態下,
Script
Encoder能識別asa,asp,cdx,htm,html,js,sct和vbs
檔案。
三、常見問題和注意事項
1、在JOY ASP中幾次看到有網友使用Script Encoder時出現如下錯誤:
"Script Encoder object <"Scripting.Encoder"> not found "
其原因:是使用Script Encoder需要Script Engine 5.0或以上指令碼引擎的支援。
解決的辦法有兩個,升級瀏覽器到IE5或安裝Script Engine 5.0。
2、在加密Global.asa時,加密完成後訪問出現:
Active Server Pages 錯誤 'ASP 0137'
無效泛型指令碼
global.asa, 行1
Script 塊必須是允許的 Global.asa 過程之一。< %...% > 中的 Script 原語不
允許在 global.asa 檔案中。允許的過程只能是 Application_OnStart ,
Application_OnEnd , Session_OnStart , 或 Session_OnEnd。
加密後的global.asa檔案為:
<%@ LANGUAGE = VBScript.Encode %><SCRIPT
LANGUAGE=VBScript.Encode
RUNAT=Server>#@~^nAIAAA==@#@&?i~Pzww^k1CYbWU{}
xjOmDY@#@&@#@&BP</SCRIPT>
<SCRIPT LANGUAGE=VBScript.Encode RUNAT=Server>#@~^OgEAAA==@#@&?
i~Pzww^k
1CYbWU{}x3U9@#@&@#@&P,P?
O~sbVr8Ln^DPxPUnD7+. ;D+COr==^#~@</SCRIPT>
<SCRIPT LANGUAGE=VBScript.Encode RUNAT=Server>#@~^DQMAAA==@#@&?
i~PU+/kk
KU{}xjYmDO@#@&@#@&E~NnJ*Px~rCl1V+MJ@#@&3Hf,?
`A@#@&ftEAAA==^#~@</SCRIPT>
<SCRIPT LANGUAGE=VBScript.Encode RUNAT=Server>#@~^WwIAAA==@#@&?
i~PU+/kk
KU{}x3x9@#@&(6P?d/bWxvEj{!/DmmG[JbP@!
@*PrCC^0+DE~:tnx@#@&</SCRIPT>
出現這個錯誤的原因是:在加密完的global.asa檔案頂部被寫入了
<%@ LANGUAGE = VBScript.Encode %>
解決的辦法是手動刪去這一行或者使用/xl參數加密即可。
3、Script Encoder對Remote Scripting無效。
四、總結
根據我個人的體會,Script Encoder還是比較好用的。使用簡單,加密後的指令碼運
行也比較穩定。不過這個東西僅僅是阻止了你隨意的查看指令碼原代碼,估計相應的解密
工具不久就會出來的。所以建議可能的話,大家還是花點時間學習一下組件技術,我覺
得可以將這兩個結合起來運用的。正如微軟的文檔所說:Setting an engine to deal
with encoded script is only one side of the equation. How do you
encode your
script? There are two mechanisms to do this: a command-line script
encoder
and a COM-based object model...
附:
Script Encoder 下載地址:
http://msdn.microsoft.com/scripting/vbscript/download/x86/sce10en.exe
Windows Script Engine 5.0
Windows 95, Windows 98 & Windows NT 4.0 - CHS 中文版 下載地址:
http://www.microsoft.com/msdownload/vbscript/scripting.asp?
msid=32186&plat=x86
&lang=Chinese/Simplified