精華|文摘 來源:www.yesky.com
轉貼-給ASP程式多一點點安全感 (2000.03.28)
給ASP程式多一點點安全感
# 使用 On Error Resume Next
這一行語句等於告訴伺服器處理常式:"如果我出錯了,呵
呵不要管我,繼續……”。這樣做可以使你捕捉到很多可以
捕捉和處理的錯誤,比那些一出錯就把家底拿給人家看的代
碼好一些。調試的時候最好不要開啟,一面無法發現哪裡出
錯了。
# 伺服器IIS設定成出錯後顯示"處理 URL 時伺服器上出錯。
請和系統管理員聯絡。”(在應用程式配置中設定)
可以避免出錯後透露細節給訪問者,你的秘密就不用擔心從
出錯資訊中透露出去了。
# 檢查傳遞的參數合法性
這一點十分重要,根據我的測試,國內很多網站上的 ASP
程式如果改變了它的參數的值,一般都會出錯。檢查合法性
就可以明顯的降低出錯機率。具體的方法這裡不再敘述。
# 盡量少用 GET 方式傳遞參數
從最基本的一點上講,這種方式要比 POST 方式多傳輸一些
位元組的 URL 給伺服器,所佔用的系統資源也會相應增加。
從安全性的角度來看也是很有好處的,可以減少命令列式的
攻擊。
# 少用中文檔案名稱
可能你覺得用中文檔案名稱比較爽,可是從專業的角度來看,
這樣做存在著很多弊端。手工敲地址時變得繁瑣起來;調試
中需要輸入檔案名稱的地方還得開啟IME或者拷貝粘貼檔案
名;本身就不夠專業啦 ;-)
=======================================================================================================================================
轉貼-解決首頁中asp中文亂碼(2000.03.27)
解決首頁中asp中文亂碼
: 在做內有VBscript的asp homepage時,一個form提交方法為GET,
: 當form的表單傳給asp處理時,入...asp?name="張三"
: 可張三的中文已經亂碼,請問如何在asp中用vbscript將亂碼恢複成
: 正確的中文.
: .......
對文字進行如下cut()過程即可
<script language=vbscript runat=server>
Function cut(str)
length = Len(str)
count = 1
Do While count <= length
If strComp(Mid(str,count,1),"Z",1) > 0 Then
length = length -1
End If
count = count + 1
Loop
cut = Left(str,Length)
if Session("Version")<>3 then '若為高版本asp則不需處理
cut = str
end if
End Function
</script>
=======================================================================================================================================
轉貼-儘可能的使用本地(局部)變數 (2000.03.24)
儘可能的使用本地(局部)變數
局部變數是在子程式和函數中定義的(也就是常說局部範圍的變數),這些變數
被編譯成數字指向並放入一張表中。這些局部變數的指向可以通過一次編譯完成。
而全域變數則是在運行時被執行的。這就意味著局部變數的存取要比全域變數快
好幾倍。而且,多維全域變數是其中最慢的,當第一次使用一個多維全域變數時,
在新的對象產生之前,就要在整個物件模型中搜尋一遍同名的對象。
以下是一個非常常見的例子:
Foo.bar.blah.baz = Foo.bar.blah.qaz(1)
If Foo.bar.blah.zaq = Foo.bar.blah.abc then
運行時產生如下結果:
1)變數Foo被定義為一個全域變數
2)變數bar被定義為Foo的一個成員
3)變數blah被定義為Foo.bar的一個成員
4)變數qaz被定義為Foo.bar.blah的一個成員
5)調用 Foo.bar.blah.quaz(1)
6)重複1至3。系統並不知道如果調用qaz改變了物件模型1-3步必須重新執行
7)定義baz為 Foo.bar.blah的成員,輸出值
8)重複1-3,執行zaq
9)重複1-3,執行abc
正如你看到的,效率極其低下,最快的方法就是把這些代碼寫在vbscript中:
Set myobj = Foo.bar.blah ' do the resolution of blah ONCE
Myobj.baz = myobj.qaz(1)
If Myobj.zaq = Myobj.abc then
=======================================================================================================================================
轉貼-正確使用Global.asa (2000.03.23)
正確使用global.asa是ASP開發人員的一個共同問題。最主要的是要知道什麼時候該用
Virtual Application,什麼時候該用Virtual directory,並且知道他們的不同。
Virtual Directories(虛擬目錄)
簡而言之,virtual directories是虛擬出來的,不一定跟web root在同一個的目
錄上,可以是其他的。但是你可以像使用web root上的其他目錄一樣使用它。當
運行global.asa以後,ASP就把所有的虛擬目錄看成是應用程式根目錄上的子目錄。
值得注意,如果你的目錄已經是website root上的一個物理目錄,那就沒有必要
再去為那個目錄做虛擬目錄了。當然,你有也可以這樣做。如果你的目錄的路徑
實在是太長,長到你無法忍受,想它短一點。你可以用建虛擬目錄的方法。使它
短些,容易記住。例如:原來的目錄http://mysite.com/directory1/directory
2/file.asp,你可以為它建一個虛擬目錄,http://mysite.com/directory2/fi
le.asp。這樣就方便多了了。
Virtual Applications(虛擬應用程式)
Virtual Applications 是一個獨立於website的web applications,而它跟Virtual
Directories一樣,不一定是web root上的一個目錄。可以是從其他的目錄虛
擬出來的。ASP不允許應用程式共用他們的application和session變數,換句話說,
就是應用程式A不能訪問應用程式B(包括web root,因為web root也是看作一個
應用程式的根。)的application和session變數,他們是私人的。反之亦然。當你
確信這個應用程式不需要與整個website、website上其他子目錄上的ASP指令碼共用
application和session變數,或者你想在同樣的記憶體空間裡隔離一個進程來運行
應用程式時。你使用Virtual Applications是正確的。
要注意的一點是:在IIS 4.0裡面的"新虛擬目錄嚮導” 所建立的virtual directory
(虛擬目錄)預設就是一個virtual application(虛擬應用程式)。要把它變回
virtual directory的話,你可以在目錄的"屬性”裡,選擇"目錄”標籤,單擊"卸載”。
小心使用多個 Global.asa
在一個website裡面使用多個Global.asa,我們必須要注意,因為那是很容易導致
變數超出範圍而丟失的。通常我們必須限制在整個website上的Global.asa的樹木,
在每一個應用程式的的根目錄裡面放一個。這是保持session和application變
量比較好的方法,不至於它們會丟失。通過在各個目錄上放置global.asa檔案,
我測試的asp檔案,可以協助我們理解它們的關係。
例子,下面是一個website的設定。在這個website下面有兩個目錄。一個Virtual
Application(虛擬應用程式)叫admin,一個Virtual Directory(虛擬目錄)叫
images。在每一個目錄下有2個檔案:global.asa和default.asp。每一個目錄裡的
default.asp都是一樣的,global.asa則根據不同的目錄有所改變。
這個是default.asp的內容:
<%
Response.Write "Session Application_Directory = <b>" &