程式員易犯的20條錯誤
1.不要將沒有過濾的使用者輸入發送給用戶端.
如:Response.Write "You have entered " & Request("UserInput")
2.不要信任用戶端和SESSION變數.
3.不要忘記指定字元集.
<META http-equiv="Content-Type" content="text/html; charset=GB2312">
4.不要在沒處理檔案路徑的情況下讓使用者訪問檔案.
如:這樣的運算式是不正常的.
http://www.example.net/article.asp?file=new.htm
這將導致以下情況的發生:
http://www.example.net/article.asp?file=/global.asa
http://www.example.net/article.asp?file=/../../../boot.ini
http://www.example.net/article.asp?file=LPT1
http://www.example.net/article.asp?file=/%2e%2e/global.asa
可用以下方法來正確處理該情況:
<%
Set fso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set f = fso.GetFile(request("file"))
If err then
Response.Write "Error"
Else
Response.Write f.Path
End If
%>
5.在沒有過濾使用者輸入的情況下,不要進行SQL查詢.
6.如果你的資料庫內容來自使用者的輸入,不要相信它.
7.不要將密碼或者其它敏感的資料儲存在ASP頁面中.
8.不要依賴弱安全檢查的內容.
如:HTTP重新導向,HTML中的TEXT欄位的最大長度限制等等.
9.不要將注釋留在HTML頁面中,特別是一些敏感資訊.
10.不要給出太多不必要的資訊給用戶端.
如在一個登入頁面,登入失敗的資訊就不能太多,如果將:密碼是四位,使用者不存在等過多的資訊給用戶端,將會給那些不懷好意的傢伙有機可乘!
11.不要在當前路徑下寫檔案,資料庫操作.要將檔案,資料庫檔案單獨放在一個分區或在WEB根目錄這外的目錄下.
12.不要在URL中帶敏感資訊.
13.不要使用INC檔案.
因為IIS預設情況下是不處理INC檔案的,最好用.INC.ASP副檔名.
14.不要在沒有驗證使用者輸入的情況下發送郵件.
15.不要在FORM的HIDDEN欄位中儲存敏感性資料.
16.不要讓IIS來處理錯誤,因為會發送太多的資訊給用戶端.
最好將IIS的指令碼調試改為只發送文本資訊.
17.好好的控制你的代碼.
將那些不用的,臨時的代碼都刪除,如.test.asp,index.asp.bak
18.在沒有測試的情況下不要發布你的代碼.
19.不要將不必要的敏感性資料存在資料庫中,這樣萬一你的資料庫被攻破,也不要造成更大的損失.
20.不要以為這樣就夠了,還有更多的情況要在實際中被考慮到.
二、Adodb.Stream 的使用說明
組件:"Adodb.Stream"
有下列方法:
Cancel 方法
使用方法如下
Object.Cancel
說明:取消執行掛起的非同步 Execute 或 Open 方法的調用。
Close 方法
使用方法如下
Object.Close
:關閉對像
CopyTo 方法
使用方法如下
Object.CopyTo(destStream,[CharNumber])
說明:將對像的資料複製,destStream指向要複製的對像,CharNumber為選擇性參數,指要複製的位元組數,不選為全部複製。
Flush 方法
使用方法如下
Object.Flush
說明:
LoadFromFile 方法
使用方法如下
Object.LoadFromFile(FileName)
說明:將FileName指定的檔案裝入對像中,參數FileName為指定的使用者名稱。
Open 方法
使用方法如下
Object.Open(Source,[Mode],[Options],[UserName],[Password])
說明:開啟對像,
參數說明:Sourece 對像源,可不指定
Mode 指定開啟模式,可不指定,選擇性參數如下:
adModeRead =1
adModeReadWrite =3
adModeRecursive =4194304
adModeShareDenyNone =16
adModeShareDenyRead =4
adModeShareDenyWrite =8
adModeShareExclusive =12
adModeUnknown =0
adModeWrite =2
Options 指定開啟的選項,可不指定,選擇性參數如下:
adOpenStreamAsync =1
adOpenStreamFromRecord =4
adOpenStreamUnspecified=-1
UserName 指定使用者名稱,可不指定。
Password 指定使用者名稱的密碼
Read 方法
使用方法如下:
Object.Read(Numbytes)
說明:讀取指定長度的二進位內容。
參數說明:Numbytes指定的要讀取的找度,不指定則讀取全部。
ReadText 方法
使用方法如下:
Object.ReadText(NumChars)
說明:讀取指定長度的文本
參數說明:NumChars指定的要讀取的找度,不指定則讀取全部。
SaveToFile 方法
使用方法如下:
Object.SaveToFile(FileName,[Options])
說明:將對像的內容寫到FileName指定的檔案中
參數說明:FileName指定的檔案
Options 存取的選項,可不指定,選擇性參數如下:
adSaveCreateNotExist =1
adSaveCreateOverWrite =2
SetEOS 方法
使用方法如下:
Object.setEOS()
說明:
SkipLine 方法
使用方法如下:
Object.SkipLine()
說明:
Write 方法
使用方法如下:
Object.Write(Buffer)
說明:將指定的資料裝入對像中。
參數說明:Buffer 為指定的要寫入的內容。
WriteText 方法
使用方法如下:
Object.Write(Data,[Options])
說明:將指定的文本資料裝入對像中。
參數說明:Data 為指定的要寫入的內容。
Options 寫入的選項,可不指定,選擇性參數如下:
adWriteChar =0
adWriteLine =1
有下列屬性:
Charset
EOS 返回對像內資料是否為空白。
LineSeparator 指定換行格式,選擇性參數有
adCR =13
adCRLF =-1
adLF =10
Mode 指定或返加模式。
Position 指定或返加對像內資料的當前指標。
Size 返回對像內資料的大小。
State 返加對像狀態是否開啟。
Type 指定或返回的資料類型,選擇性參數為:
adTypeBinary =1
adTypeText =2
三、根據需要動態include不同的檔案(需要FSO支援)
受<! #include file="filename.asp" --> 宏限制
必須存在該檔案並且會預先編譯(不管前面是否加以條件)
經常有這樣的要求,根據不同的需求要求include不同的檔案
如各個人的不同設定,所以要求能動態include檔案。
代碼如下:
Function include(filename)
Dim re,content,fso,f,aspStart,aspEnd
set fso=CreateObject("Scripting.FileSystemObject")
set f=fso.OpenTextFile(server.mappath(filename))
content=f.ReadAll
f.close
set f=nothing
set fso=nothing
set re=new RegExp
re.pattern="^/s*="
aspEnd=1
aspStart=inStr(aspEnd,content,"<%")+2
do while aspStart>aspEnd+1
Response.write Mid(content,aspEnd,aspStart-aspEnd-2)
aspEnd=inStr(aspStart,content,"%/>")+2
Execute(re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Response.Write "))
aspStart=inStr(aspEnd,content,"<%")+2
loop
Response.write Mid(content,aspEnd)
set re=nothing
End Function
使用範例:
include("youinc.asp")