0
我想通過參數化SQL語句使一個經典的ASP/VBScript網站更安全。
我有以下功能:如何在ADODB.RecordSet中使用ADODB.CommandObject?
Function OpenUpdateableRS(strSQL)
Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open strSQL, cnDZ, adOpenKeyset, adLockPessimistic, adCmdText
Set OpenUpdateableRS = rs
Set rs = Nothing
End Function
我打算把它轉換成類似:
Function SecureOpenUpdateableRS(strSQL, strParam1, strParam2)
Dim rs
Dim cmdOB
Set cmdOB = Server.CreateObject("ADODB.CommandObject")
With cmdOB
.ActiveConnection = cnDZ
.CommandText = strSQL
.Parameters(0).value = strParam1
.Parameters(0).value = strParam2
End With
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open cmdOB.Execute, , adOpenKeyset, adLockPessimistic
Set SecureOpenUpdateableRS = rs
Set rs = Nothing
End Function
當我打電話與功能:
Set rs = SecureOpenUpdateableRS("SELECT CustID, LastActive, LoggedIn, SessionID FROM tblLogins WHERE EMail = ? AND PWord = ?", strEMail, strPassword)
我得到一個「500 - 內部服務器錯誤」,這可能是因爲我禁用服務器上的調試。
關於如何使原始功能更安全而不破壞它的任何想法?
感謝您的快速回復。有沒有什麼辦法可以使用參數化語句而不必確定輸入參數的類型? – Vinayak 2013-03-28 11:02:37
像這個StackOverflow頁面上的代碼: http://stackoverflow.com/questions/11020846/classic-asp-protection-against-sql-injection – Vinayak 2013-03-28 11:03:57