'安全密码参数设置,“0,3,4,2,0”;
'作用:有人通过下载数据库或SQL注入得到了管理员的真正密码后,仍不能进入系统
'第1位 是否启用安全密码 为0时则不启用 为1时启用
'第2位 取验证码中的第几位参与运算,取1-4之间的数字
'第3位 取验证码中的第几位参与运算,取1-4之间的数字
'第4位 将取得的两位验证码作什么运算,1为加法运算;2为乘法运算
'第5位 将得到的结果插入到密码的第几位后面
'例如安全码参数设置为1,1,3,2,5 即为启用安全码,将验证码的第一位和第三位相乘的结果插入到密码的第五位后面
'如果你登陆时 产生的验证码为3568 管理员密码为TryLogin
'则你应该输入的密码为TryLo18gin
'如果开启了验证码中有随机字母,请不要使用此功能
Const G_SAFE_PASS_SET_STR = "0,1,2,2,0"
也就是说假如你的密码为admin888,设置安全密码参数为"1,1,3,2,0",在验证码为3254时,你应该输入15admin888才能登录,而通过数据库中得到的admin888是无法登录的,在CheckLogin.asp中相关代码为:
p_TempUserPass = Replace(Trim(Request.Form("Password")),"'","''")
p_PassArr=split(G_SAFE_PASS_SET_STR,",")
If p_PassArr(0)=1 then
If p_PassArr(3)="1" then
p_TrueResult=Trim(Cstr(Cint(mid(Session("GetCode"),Cint(p_PassArr(1)),1))+Cint(mid(Session("GetCode"),Cint(p_PassArr(2)),1))))
Else
p_TrueResult=Trim(Cstr(Cint(mid(Session("GetCode"),Cint(p_PassArr(1)),1))*Cint(mid(Session("GetCode"),Cint(p_PassArr(2)),1))))
End If
If p_PassArr(4)="0" then
p_CheckedResult=left(p_TempUserPass,Len(p_TrueResult))
p_UserPass=mid(p_TempUserPass,Len(p_TrueResult)+1)
ElseIf Cint(p_PassArr(4))>len(p_TempUserPass)-len(p_TrueResult) then
p_CheckedResult=right(p_TempUserPass,Len(p_TrueResult))
p_UserPass=left(p_TempUserPass,len(p_TempUserPass)-Len(p_TrueResult))
Else
p_CheckedResult=mid(p_TempUserPass,p_PassArr(4)+1,Len(p_TrueResult))
p_UserPass=left(p_TempUserPass,p_PassArr(4))&mid(p_TempUserPass,Cint(p_PassArr(4))+len(p_TrueResult)+1)
End If
Else
p_UserPass=p_TempUserPass
End If那在密码被暴破出来后,这安全密码参数能起到多大的作用呢?我们可以算得出来:4*4*2=32,32次!最多32次即可尝试登录成功!相信任何一个人都有这个耐心!所以,对于管理员密码安全性我们重点应该放在密码的复杂性和数据库的安全性上,切不可对安全密码参数抱太多的希望!
评论(0)
暂无评论。