原密码方案的弊端
我的网站为增强网站活力、分担网站维护和管理工作,招收了一部分人员参与网站某些栏目的维护和管理。这些栏目一般用专用的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
运行后的界面如图1所示:
图 1
读取、验证、消除密码
首先读出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中,毕竟是很不安全的。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器