设为首页收藏本站订阅更新

无忧脚本

 找回密码
 加入无忧

QQ登录

只需一步,快速开始

搜索
查看: 3785|回复: 4

【讨论】网站后台动态密码

[复制链接]
发表于 2006-5-10 00:57:07 | 显示全部楼层 |阅读模式
现在网站的后台都采用验证码来防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试。
这里来个采用验证码来生成动态的密码,即使数据库被下载知道了密码后也不能登陆后台。其实也是对验证码的+ X加入密码中
1 。生成验证码和登陆窗口
login。asp
<%
Function getcode()
        Dim test
        On Error Resume Next
        Set test=Server.CreateObject("Adodb.Stream")
        If Err Then
                Dim zNum
                Randomize timer
                zNum = cint(8999*Rnd+1000)
                Session("GetCode") = zNum
                getcode= Session("GetCode")               
        Else
                getcode= "<img src=""code.asp"">"               
        End If
        Set test=Nothing
End Function
%>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>登陆</title>
</head>

<body>
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<form name="form" method="post" action="chkLogin.asp">

        <tr>
                <td><input type="text" name="adminName"  size="20" value="帐户"></td>
</td>
        </tr>
        <tr>
                <td><input type="password" name="adminPass" value="密码">
</td>
        </tr>
        <tr>
                <td><input name="s" type="text" size="10" maxlength="4"><%=getcode()%></td>
        </tr>
        <tr>
                <td><input type="submit" name="submit" value="登陆"></td>
        </tr>
        </form>
</table>

</body>

</html>
2。验证页面
chkLogin.asp
<%
Const SafePass="1,1,4,2,3"
'作用:有人通过下载数据库或SQL注入得到了管理员的真正密码后,仍不能进入系统
'
'第1位        是否启用安全密码 为0时则不启用 为1时启用
'第2位        取验证码中的第几位参与运算,取1-4之间的数字
'第3位        取验证码中的第几位参与运算,取1-4之间的数字
'第4位        将取得的两位验证码作什么运算,1为加法运算;2为乘法运算
'第5位        将得到的结果插入到密码的第几位后面
'
'例如安全码参数设置为1,1,3,2,3  即为启用安全码,将验证码的第一位和第三位相乘的结果插入到密码的第3位后面
'如果你登陆时 产生的验证码为2568 管理员密码为admin
'则你应该输入的密码为adm12in
dim adminName, adminPass
TempUserPass = Replace(Trim(Request.Form("adminPass")),"'","''")
TempadminName = Replace(Trim(Request.Form("adminName")),"'","''")
PassArr=split(SafePass,",")

If PassArr(0)=1 then
        If PassArr(3)="1" then
                TrueResult=Trim(Cstr(Cint(mid(Session("GetCode"),Cint(PassArr(1)),1))+Cint(mid(Session("GetCode"),Cint(PassArr(2)),1))))
        Else
                TrueResult=Trim(Cstr(Cint(mid(Session("GetCode"),Cint(PassArr(1)),1))*Cint(mid(Session("GetCode"),Cint(PassArr(2)),1))))
        End If
        If PassArr(4)="0" then
                CheckedResult=left(TempUserPass,Len(TrueResult))
                UserPass=mid(TempUserPass,Len(TrueResult)+1)
        ElseIf Cint(PassArr(4))>len(TempUserPass)-len(TrueResult) then
                CheckedResult=right(TempUserPass,Len(TrueResult))
                UserPass=left(TempUserPass,len(TempUserPass)-Len(TrueResult))
        Else
                CheckedResult=mid(TempUserPass,PassArr(4)+1,Len(TrueResult))
                UserPass=left(TempUserPass,PassArr(4))&mid(TempUserPass,Cint(PassArr(4))+len(TrueResult)+1)
        End If
Else
        UserPass=TempUserPass
End If
Session("GetCode")=""
aname = trim(TempadminName)
apass = trim(UserPass)
%>
下面其他的用户名和密码以及验证码 的验证自己在加

[ 本帖最后由 puti 于 2006-5-10 12:52 AM 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入无忧

x
发表于 2012-9-9 10:53:40 | 显示全部楼层
奇怪,这个帖子怎么没人关注呢
发表于 2012-11-13 23:16:13 | 显示全部楼层
不错  下载了研究下
发表于 2012-12-18 16:21:09 | 显示全部楼层
是不错的,牛人语录
发表于 2012-12-23 21:45:47 | 显示全部楼层
本帖最后由 xfdipzone 于 2012-12-23 21:48 编辑

<%
Function getcode()
        Dim test
        On Error Resume Next
        Set test=Server.CreateObject("Adodb.Stream")
        If Err Then
                Dim zNum
                Randomize timer
                zNum = cint(8999*Rnd+1000)
                Session("GetCode") = zNum
                getcode= Session("GetCode")               
        Else
                getcode= "<img src=""code.asp"">"               
        End If
        Set test=Nothing
End Function
%>
这里的 Set test=Server.CreateObject("Adodb.Stream")
test 没有使用过,最后只set test = Nothing,写这句意义何在?

如果已经知道用户的密码,用此登入,无异于用户正常登入,你又如何可以判断用户是下载数据库后知道密码,还是真的是当前用户呢?即使你需要用户根据验证码去计算真正的密码,但这样有什么意思。首先,对用户体验不好。然后,破解的人都可以按规则去计算。有何用呢?

还不如直接将密码按一定规则加密后(例如md5(md5(password)+salt)  salt为随机数),保存在DB。
您需要登录后才可以回帖 登录 | 加入无忧

本版积分规则

小黑屋|手机版|Archiver|无忧脚本 ( 苏ICP备05080427号 )|值班电话:027-62300445   鄂公网安备 42011102000433号

GMT+8, 2017-11-18 07:03 , Processed in 0.098616 second(s), 8 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表