说说风讯的安全密码参数

在风讯CMS4.0sp5配置文件const.asp中有这么一个参数:安全密码参数,在该文件中对它的说明如下:

引用内容 引用内容
'安全密码参数设置,“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 | 引用: 0 | 查看次数: 4308
发表评论
登录后再发表评论!