ASP開發(fā)網(wǎng)頁牢記注意事項
更新時間:2007年03月12日 00:00:00 作者:
ASP開發(fā)網(wǎng)頁牢記注意事項 選擇自 RAINMAN_NET 的 Blog
關(guān)鍵字 ASP開發(fā)網(wǎng)頁牢記注意事項
出處
永遠不要相信用戶輸入的內(nèi)容具有適當?shù)拇笮』蛘甙m當?shù)淖址T谑褂闷渥龀鰶Q策之前應(yīng)該始終對用戶輸入進行驗證。最佳的選擇是創(chuàng)建一個 COM+ 組件,這樣您可以從 ASP 頁面中調(diào)用該組件來驗證用戶的輸入內(nèi)容。您也可以使用 Server.HTMLEncode 方法、Server.URLEncode 方法,或者本頁底部代碼示例中的某一個。
不要通過連接用戶輸入的字符串來創(chuàng)建 ASP 頁中的數(shù)據(jù)庫連接字符串。惡意用戶可以通過在他們的輸入內(nèi)容中插入代碼來獲取數(shù)據(jù)庫的訪問權(quán)限。如果您使用的是 SQL 數(shù)據(jù)庫,那么請使用存儲過程創(chuàng)建數(shù)據(jù)庫連接字符串。
不要使用默認的 SQL 管理員帳戶名 sa。每個使用 SQL 的用戶都知道存在 sa 帳戶。創(chuàng)建具有安全可靠密碼的其他 SQL 管理帳戶,并刪除 sa 帳戶。
在您存儲客戶端用戶密碼之前,請對這些密碼使用哈希算法、進行 base64 編碼,或者使用 Server.HTMLEncode 或者 Server.URLEncode 進行編碼。您還可以使用本頁底部的某個代碼示例驗證客戶端密碼中的字符。
不要把管理帳戶名或密碼放置在管理腳本或 ASP 頁中。
不要根據(jù)請求標題在代碼中做出決策,因為標題數(shù)據(jù)可以被惡意用戶偽造。在使用請求數(shù)據(jù)前,始終要對其進行編碼或者使用下面的代碼示例驗證其所包含的字符。
不要將安全數(shù)據(jù)存儲在 Cookie 中或者將輸入字段隱藏在網(wǎng)頁中。
始終將安全套接字層 (SSL) 用于基于會話的應(yīng)用程序,以避免未對會話 Cookie 進行加密就發(fā)送它們所帶來的風(fēng)險。如果會話 Cookie 沒有經(jīng)過加密,則惡意用戶可以使用一個應(yīng)用程序中的會話 Cookie 進入到與之在同一進程中的另一個應(yīng)用程序。
當編寫 ISAPI 應(yīng)用程序、篩選器或者 COM+ 對象時,請注意由于變量和數(shù)據(jù)的大小而造成的緩沖區(qū)溢出。還要注意可能由于解釋造成的規(guī)范化問題,例如將絕對路徑名解釋成相對路徑名或 URL。
當在單線程單元 (STA) 內(nèi)運行的 ASP 應(yīng)用程序切換到多線程單元 (MTA) 內(nèi)時,模擬令牌將過時。這可能導(dǎo)致應(yīng)用程序在無模擬的情況下運行,讓其用可能允許訪問其他資源的進程的標識有效地運行。如果您必須切換線程模型,請在進行更改之前,先禁用該應(yīng)用程序并將其卸載。
代碼示例
本代碼示例包含了一個函數(shù),它可刪除發(fā)送至該函數(shù)的字符串中的可能有害的字符。在上面的兩個示例中,指定代碼頁以確保正確地編碼。下面的示例使用的是 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;
}
%>
摘自網(wǎng)海之貝
關(guān)鍵字 ASP開發(fā)網(wǎng)頁牢記注意事項
出處
永遠不要相信用戶輸入的內(nèi)容具有適當?shù)拇笮』蛘甙m當?shù)淖址T谑褂闷渥龀鰶Q策之前應(yīng)該始終對用戶輸入進行驗證。最佳的選擇是創(chuàng)建一個 COM+ 組件,這樣您可以從 ASP 頁面中調(diào)用該組件來驗證用戶的輸入內(nèi)容。您也可以使用 Server.HTMLEncode 方法、Server.URLEncode 方法,或者本頁底部代碼示例中的某一個。
不要通過連接用戶輸入的字符串來創(chuàng)建 ASP 頁中的數(shù)據(jù)庫連接字符串。惡意用戶可以通過在他們的輸入內(nèi)容中插入代碼來獲取數(shù)據(jù)庫的訪問權(quán)限。如果您使用的是 SQL 數(shù)據(jù)庫,那么請使用存儲過程創(chuàng)建數(shù)據(jù)庫連接字符串。
不要使用默認的 SQL 管理員帳戶名 sa。每個使用 SQL 的用戶都知道存在 sa 帳戶。創(chuàng)建具有安全可靠密碼的其他 SQL 管理帳戶,并刪除 sa 帳戶。
在您存儲客戶端用戶密碼之前,請對這些密碼使用哈希算法、進行 base64 編碼,或者使用 Server.HTMLEncode 或者 Server.URLEncode 進行編碼。您還可以使用本頁底部的某個代碼示例驗證客戶端密碼中的字符。
不要把管理帳戶名或密碼放置在管理腳本或 ASP 頁中。
不要根據(jù)請求標題在代碼中做出決策,因為標題數(shù)據(jù)可以被惡意用戶偽造。在使用請求數(shù)據(jù)前,始終要對其進行編碼或者使用下面的代碼示例驗證其所包含的字符。
不要將安全數(shù)據(jù)存儲在 Cookie 中或者將輸入字段隱藏在網(wǎng)頁中。
始終將安全套接字層 (SSL) 用于基于會話的應(yīng)用程序,以避免未對會話 Cookie 進行加密就發(fā)送它們所帶來的風(fēng)險。如果會話 Cookie 沒有經(jīng)過加密,則惡意用戶可以使用一個應(yīng)用程序中的會話 Cookie 進入到與之在同一進程中的另一個應(yīng)用程序。
當編寫 ISAPI 應(yīng)用程序、篩選器或者 COM+ 對象時,請注意由于變量和數(shù)據(jù)的大小而造成的緩沖區(qū)溢出。還要注意可能由于解釋造成的規(guī)范化問題,例如將絕對路徑名解釋成相對路徑名或 URL。
當在單線程單元 (STA) 內(nèi)運行的 ASP 應(yīng)用程序切換到多線程單元 (MTA) 內(nèi)時,模擬令牌將過時。這可能導(dǎo)致應(yīng)用程序在無模擬的情況下運行,讓其用可能允許訪問其他資源的進程的標識有效地運行。如果您必須切換線程模型,請在進行更改之前,先禁用該應(yīng)用程序并將其卸載。
代碼示例
本代碼示例包含了一個函數(shù),它可刪除發(fā)送至該函數(shù)的字符串中的可能有害的字符。在上面的兩個示例中,指定代碼頁以確保正確地編碼。下面的示例使用的是 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;
}
%>
摘自網(wǎng)海之貝
相關(guān)文章
ASP編程入門進階(十四):Browser & Linking
ASP編程入門進階(十四):Browser & Linking...2007-01-01javascript asp教程第十課--global asa
javascript asp教程第十課--global asa...2007-03-03如何在數(shù)據(jù)庫中用好Transaction?
如何在數(shù)據(jù)庫中用好Transaction?...2006-06-06