步驟
永遠不要相信用戶輸入的內容具有適當的大小或者包含適當的字符在使用其做出決策之前應該始終對用戶輸入進行驗證最佳的選擇是創建一個 COM+ 組件這樣您可以從 ASP 頁面中調用該組件來驗證用戶的輸入內容您也可以使用 ServerHTMLEncode 方法ServerURLEncode 方法或者本頁底部代碼示例中的某一個
不要通過連接用戶輸入的字符串來創建 ASP 頁中的數據庫連接字符串惡意用戶可以通過在他們的輸入內容中插入代碼來獲取數據庫的訪問權限如果您使用的是 SQL 數據庫那麼請使用存儲過程創建數據庫連接字符串
不要使用默認的 SQL 管理員帳戶名 sa每個使用 SQL 的用戶都知道存在 sa 帳戶創建具有安全可靠密碼的其他 SQL 管理帳戶並刪除 sa 帳戶
在您存儲客戶端用戶密碼之前請對這些密碼使用哈希算法進行 base 編碼或者使用 ServerHTMLEncode 或者 ServerURLEncode 進行編碼您還可以使用本頁底部的某個代碼示例驗證客戶端密碼中的字符
不要把管理帳戶名或密碼放置在管理腳本或 ASP 頁中
不要根據請求標題在代碼中做出決策因為標題數據可以被惡意用戶偽造在使用請求數據前始終要對其進行編碼或者使用下面的代碼示例驗證其所包含的字符
不要將安全數據存儲在 Cookie 中或者將輸入字段隱藏在網頁中
始終將安全套接字層 (SSL) 用於基於會話的應用程序以避免未對會話 Cookie 進行加密就發送它們所帶來的風險如果會話 Cookie 沒有經過加密則惡意用戶可以使用一個應用程序中的會話 Cookie 進入到與之在同一進程中的另一個應用程序
當編寫 ISAPI 應用程序篩選器或者 COM+ 對象時請注意由於變量和數據的大小而造成的緩沖區溢出還要注意可能由於解釋造成的規范化問題例如將絕對路徑名解釋成相對路徑名或 URL當在單線程單元 (STA) 內運行的 ASP 應用程序切換到多線程單元 (MTA) 內時模擬令牌將過時這可能導致應用程序在無模擬的情況下運行讓其用可能允許訪問其他資源的進程的標識有效地運行如果您必須切換線程模型請在進行更改之前先禁用該應用程序並將其卸載
代碼示例
本代碼示例包含了一個函數它可刪除發送至該函數的字符串中的可能有害的字符在上面的兩個示例中指定代碼頁以確保正確地編碼下面的示例使用的是 Microsoft Visual Basic? Scripting Edition(VBScript)
<%@ LANGUAGE=\VBScript\ %>
<%
ResponseCodePage =
ResponseWrite(\Hello \ & RemoveBadCharacters(RequestForm(\UserName\)))
ResponseWrite(\<BR>This is why you received an error\)
Function RemoveBadCharacters(strTemp)
Dim regEx
Set regEx = New RegE
xp
regExPattern = \[^\\s\\w]\
regExGlobal = True
RemoveBadCharacters = regExReplace(strTemp \\)
End Function
%>
下面的示例使用的是 Microsoft JScript?
<%@ LANGUAGE=\JScript\ %>
<%
ResponseCodePage =
ResponseWrite(\Hello \ + RemoveBadCharacters(RequestForm(\UserName\)))
ResponseWrite(\<BR>This is why you received an error\)
function RemoveBadCharacters(strTemp) {
strTemp = strTempreplace(/[^\\s\\w]/g\\)
return strTemp
}
%>
From:http://tw.wingwit.com/Article/program/net/201311/12252.html