为什么会产生万能密码?为什么会产生注入漏洞,原因就在于我们把提交的变量直接带入了数据库语句,造成逻辑上的right,下面有一段登陆代码,是截自ewebeditor的登录代码,大家可以参考下,可以防止注入漏洞的出现。
----------------------------------------------------------------------------------------------------------------
Select Case sAction
Case "LOGIN"
s_Usr = Trim(Request("usr"))
s_Pwd = Trim(Request("pwd"))
If s_Usr <> "" And s_Pwd <> "" Then
sSql = "select * from ewebeditor_system"
oRs.Open sSql, oConn, 0, 1
If Not oRs.Eof Then
If oRs("sys_username") = md5(s_Usr) And oRs("sys_userpass") = md5(s_Pwd) Then
' 登录成功
Session("eWebEditor_User") = s_Usr
Session("eWebEditor_Version") = oRs("sys_version")
Response.Redirect "admin_default.asp"
Response.End
End If
End If
oRs.Close
End If
sErrMsg = "提示:用户名或密码错误!"
.......................
----------------------------------------------------------------------------------------------------------------
在这里,系统是从数据库中搞出系统登录用户名表,然后与提交的用户名和密码进行比较,从根本上解决了把提交数据带入数据库。