ASP管理网页的自动随机密码方案
类别: ASP教程
原密码方案的弊端
我的网站为增强网站活力、分担网站维护和管理工作,招收了一部分人员参与网站某些栏目的维护和管理。这些栏目一般用专用的ASP管理网页进行管理(例如聊天室的踢人、从论坛删除不合适的帖子等)。这些管理网页同栏目网页一样,是在WWW上发布的,所以需要密码保护。我们以前的密码方案比较简单,是利用ASP判别指令检测提交网页的提交密码。例如:
<% if request("PWD")="password" then %>
……(管理网页内容)
<% else
response.write "密码错误"
end if%>
这个方案显然存在很多弊端,例如,由于某些软件的安全漏洞,使源代码被下载,造成失密;学生网管更换,密码流失;每次更换密码不得不修改源代码,增加了工作量等。针对这些问题的解决方案有许多种,如设置权限、IP地址检测等等。本文介绍一种自动随机密码方案,该方法不但简单,而且具有较高的安全性。
产生随机密码
首先编制一个在WWW服务器上本地运行的产生随机密码的程序,并将该随机密码写入与ASP管理网页同一子目录内的一个文本文件password.txt中。此部分可以用任何开发语言编写,笔者使用的是VB。该程序非常简单,控件只有一个LABLE、一个TEXT和一个COMMAND。主要源代码如下:
Private Sub Form_Load()
Dim UpperBound, LowerBound, MyValue As Double
\'密码的最高数值
UpperBound = 10000000000#
\'密码的最低数值
LowerBound = 1
\'随机密码种子按时间取值
Randomize
\'取得随机密码
MyValue = Int((UpperBound - LowerBound + 1) * Rnd + LowerBound)
\'显示随机密码
Text1.Text = MyValue
\'将密码写入文本文件
Open "……(ASP管理网子目录)/password.txt" For Output As #1
write #1, MyValue
Close #1
End Sub
读取、验证、消除密码
首先读出password.txt文件内的密码,然后再对password.txt文件进行覆盖,写入一个不能通过管理网页检测的字符串,例如"nopass"。这样随机产生的密码就消失了,即使password.txt和管理网页源文件被下载,仍然无法通过管理网页的密码检测。ASP管理网页的操作和检测代码如下:
<%
dim pswd1,pswd2
whichfile=server.mappath("password.txt")
set fs=createobject("scripting.filesystemobject")
set thisfile=fs.opentextfile(whichfile)
’读取密码
pswd1=thisfile.readline
thisfile.close
paswd2="nopass"
set out=fs.createtextfile(whichfile)
’覆盖密码
out.writeline(paswd2)
out.close
set fs=nothing
’和提交的密码对比以及验证密码是否有效
if request("PWD") =pswd1 and pswd1 <> pswd2 then %>
……(管理网页内容)
<% else
response.write "密码错误"
end if %>
小 结
需要注意的是:在运行自动密码程序后,最好马上启动管理网页读取和消除密码,否则把密码存在password.txt中,毕竟是很不安全的。
我的网站为增强网站活力、分担网站维护和管理工作,招收了一部分人员参与网站某些栏目的维护和管理。这些栏目一般用专用的ASP管理网页进行管理(例如聊天室的踢人、从论坛删除不合适的帖子等)。这些管理网页同栏目网页一样,是在WWW上发布的,所以需要密码保护。我们以前的密码方案比较简单,是利用ASP判别指令检测提交网页的提交密码。例如:
<% if request("PWD")="password" then %>
……(管理网页内容)
<% else
response.write "密码错误"
end if%>
这个方案显然存在很多弊端,例如,由于某些软件的安全漏洞,使源代码被下载,造成失密;学生网管更换,密码流失;每次更换密码不得不修改源代码,增加了工作量等。针对这些问题的解决方案有许多种,如设置权限、IP地址检测等等。本文介绍一种自动随机密码方案,该方法不但简单,而且具有较高的安全性。
产生随机密码
首先编制一个在WWW服务器上本地运行的产生随机密码的程序,并将该随机密码写入与ASP管理网页同一子目录内的一个文本文件password.txt中。此部分可以用任何开发语言编写,笔者使用的是VB。该程序非常简单,控件只有一个LABLE、一个TEXT和一个COMMAND。主要源代码如下:
Private Sub Form_Load()
Dim UpperBound, LowerBound, MyValue As Double
\'密码的最高数值
UpperBound = 10000000000#
\'密码的最低数值
LowerBound = 1
\'随机密码种子按时间取值
Randomize
\'取得随机密码
MyValue = Int((UpperBound - LowerBound + 1) * Rnd + LowerBound)
\'显示随机密码
Text1.Text = MyValue
\'将密码写入文本文件
Open "……(ASP管理网子目录)/password.txt" For Output As #1
write #1, MyValue
Close #1
End Sub
读取、验证、消除密码
首先读出password.txt文件内的密码,然后再对password.txt文件进行覆盖,写入一个不能通过管理网页检测的字符串,例如"nopass"。这样随机产生的密码就消失了,即使password.txt和管理网页源文件被下载,仍然无法通过管理网页的密码检测。ASP管理网页的操作和检测代码如下:
<%
dim pswd1,pswd2
whichfile=server.mappath("password.txt")
set fs=createobject("scripting.filesystemobject")
set thisfile=fs.opentextfile(whichfile)
’读取密码
pswd1=thisfile.readline
thisfile.close
paswd2="nopass"
set out=fs.createtextfile(whichfile)
’覆盖密码
out.writeline(paswd2)
out.close
set fs=nothing
’和提交的密码对比以及验证密码是否有效
if request("PWD") =pswd1 and pswd1 <> pswd2 then %>
……(管理网页内容)
<% else
response.write "密码错误"
end if %>
小 结
需要注意的是:在运行自动密码程序后,最好马上启动管理网页读取和消除密码,否则把密码存在password.txt中,毕竟是很不安全的。
- 上一篇: ASP中如何设计跨越域的COOKIE
- 下一篇: ASP与数据库运用:密码验证
-= 资 源 教 程 =-
文 章 搜 索