1、永遠不要相信使用者輸入的內容具有適當的大小或者包含適當的字元。在使用其做出決策之前應該始終對使用者輸入進行驗證。最佳的選擇是建立一個 COM+ 元件,這樣您可以從 ASP 頁面中呼叫該元件來驗證使用者的輸入內容。您也可以使用 Server.HTMLEncode 方法、Server.URLEncode 方法,或者本頁底部程式碼示例中的某一個。
2、不要透過連線使用者輸入的字串來建立 ASP 頁中的資料庫連線字串。惡意使用者可以透過在他們的輸入內容中插入程式碼來獲取資料庫的訪問許可權。如果您使用的是 SQL 資料庫,那麼請使用儲存過程建立資料庫連線字串。
3、不要使用預設的 SQL 管理員帳戶名 sa。每個使用 SQL 的使用者都知道存在 sa 帳戶。建立具有安全可靠密碼的其他 SQL 管理帳戶,並刪除 sa 帳戶。
4、在您儲存客戶端使用者密碼之前,請對這些密碼使用雜湊演算法、進行 base64 編碼,或者使用 Server.HTMLEncode 或者 Server.URLEncode 進行編碼。您還可以使用本頁底部的某個程式碼示例驗證客戶端密碼中的字元。
5、不要把管理帳戶名或密碼放置在管理指令碼或 ASP 頁中。
6、不要根據請求標題在程式碼中做出決策,因為標題資料可以被惡意使用者偽造。在使用請求資料前,始終要對其進行編碼或者使用下面的程式碼示例驗證其所包含的字元。
7、不要將安全資料儲存在 Cookie 中或者將輸入欄位隱藏在網頁中。
始終將安全套接字層 (SSL) 用於基於會話的應用程式,以避免未對會話 Cookie 進行加密就傳送它們所帶來的風險。如果會話 Cookie 沒有經過加密,則惡意使用者可以使用一個應用程式中的會話 Cookie 進入到與之在同一程式中的另一個應用程式。
8、當編寫 ISAPI 應用程式、篩選器或者 COM+ 物件時,請注意由於變數和資料的大小而造成的緩衝區溢位。還要注意可能由於解釋造成的規範化問題,例如將絕對路徑名解釋成相對路徑名或 URL。
9、當在單執行緒單元 (STA) 內執行的 ASP 應用程式切換到多執行緒單元 (MTA) 內時,模擬令牌將過時。這可能導致應用程式在無模擬的情況下執行,讓其用可能允許訪問其他資源的程式的標識有效地執行。如果您必須切換執行緒模型,請在進行更改之前,先禁用該應用程式並將其解除安裝。
程式碼示例
本程式碼示例包含了一個函式,它可刪除傳送至該函式的字串中的可能有害的字元。在上面的兩個示例中,指定內碼表以確保正確地編碼。下面的示例使用的是 Microsoft Visual Basic® Scripting Edition(VBScript):
<%@ LANGUAGE=
"VBScript"
%>
<%
Response.CodePage = 1252
Response.Write(
"Hello, "
& RemoveBadCharacters(Request.Form(
"UserName"
)))
Response.Write(
"<BR>This is why you received an error:"
)
Function
RemoveBadCharacters(strTemp)
Dim
regEx
Set
regEx =
New
RegExp
regEx.Pattern =
"[^\s\w]"
regEx.Global =
True
RemoveBadCharacters = regEx.Replace(strTemp,
""
)
End
Function
%>
下面的示例使用的是 Microsoft JScript®:
<%@ LANGUAGE=
"JScript"
%>
<%
Response.CodePage = 1252;
Response.Write(
"Hello, "
+ RemoveBadCharacters(Request.Form(
"UserName"
)));
Response.Write(
"<BR>This is why you received an error:"
);
function RemoveBadCharacters(strTemp) {
strTemp = strTemp.replace(/[^\s\w]/g,
""
);
return strTemp;
}
%>