利用ASP制作验证IP的页面
数码时尚
利用Java Script或VB Script,我们可以很容易做到让外网用户必须经过验证后才能访问站点资源。以下简单介绍一下这种方法。
一、建立外网用户数据库
首先使用Access数据库建立外网用户数据库,库名为LOGIN.MDB,表名为USER,含有两个字段:NAME和PASS,分别为外网用户的姓名和登录密码。
二、创建DSN
点击“控制面板”中的“ODBC数据源管理器”,并创建某个数据库的ODBC数据资源名,即DSN,这样以后可以通过使用数据库DSN连接具体的数据库。
“ODBC数据源管理器”提供了三种DSN:用户DSN、系统DSN和文件DSN。其中用户DSN会把相应的配置信息保存在Windows的注册表中,但是只允许创建该DSN的登录用户使用;系统DSN同样将有关的配置信息保存在系统注册表中,但是与用户DSN不同的是系统DSN允许所有登录服务器的用户使用;文件DSN则把具体的配置信息保存在硬盘上的某个具体文件中,允许所有登录服务器的用户使用,而且即使在没有任何用户登录的情况下,也可以提供对数据库DSN的访问支持。此外,因为文件DSN被保存在硬盘文件里,所以可以方便地复制到其他机器中。这样,用户可以不对系统注册表进行任何改动就可直接使用在其他机器上创建的DSN。
在以上三种数据库DSN中,建议用户选择系统DSN或文件DSN。如果用户更喜欢文件DSN的可移植性,还可以通过在WinNT以上系统中设定文件的访问权限来获得较高的安全保障。本文就是采用的文件DSN方式。
建立新的DSN,打开数据源(ODBC)工具,选择文件DSN标签页,选择“添加”,然后在弹出窗口中选择“Driver do Microsoft Access(*.mdb)”项,单击“下一步”按钮并在随后的对话框中输入所要建立的文件DSN的文件名和保存路径(本例中的文件DSN名为LOGIN.DSN),再单击“下一步”及“完成”按钮,最后选择用户将要连接的数据库(本例中为LOGIN.MDB)。
三、程序设计
以下即为实现一个简单的验证页面功能的源程序。此页面只准本单位内部网的用户进行访问(在此假设内部网的IP地址是在10.202.126.1至10.202.126.255之间),如果是外网用户进行访问则要求输入访问用户名及密码。在此要使用到Request对象的ServerVariables数据集合,通过它来获得环境变量REMOTE_ADDR的值,以此取得访问用户的IP地址。
程序源码(firewall.asp)如下:
<html>
<head>
<title>登录</title>
</head>
<body bgcolor="#008080">
<%
'使用Request.ServerVariables("REMOTE_ADDR")得到客户端IP地址
'并保存在变量remoteip中
remoteip=Request.ServerVariables("REMOTE_ADDR")
'取IP地址前三个段的值并保存到tempip中
tempip=left(cstr(remoteip),10)
'IP地址有效性检验及密码验证,包括两方面的内容:
'如果IP地址符合则为内网用户,通过验证;
'如果IP地址不符合则为外网用户,需检验输入的用户名、密码是否正确
if (tempip <> "10.202.126") then
username=request.form("t1")
password=request.form("t2")
set oConn=Server.CreateObject("ADODB.connection")
set oRS=Server.CreateObject("ADODB.recordset")
dsnstr="filedsn=" &server.mappath("login.dsn")
oConn.OPEN dsnstr
SQLQUERY="select * from user where name='"&username&"' and pass='"&password&"'"
set oRS=server.createObject("adodb.recordset")
oRS.Open SQLQUERY,oConn,1,1
if oRS.eof then
%>
<p><font color="#FF0000">
对不起,用户:<%=username%>没有访问权限,或密码不正确!
<br></font></p>
<form method="POST" action="firewall.asp">
<p align="center">
用户名:<input type="text" name="t1" size="20">
口令:<input type="password" name="t2" size="20">
<input type="submit" value="提交" name="B1">
<input type="reset" value="全部重写" name="B2">
</p>
</form>
<%
oRS.close
set oRS=nothing
oConn.close
set oConn=nothing
%>
<%else %>
<FONT COLOR=#FFFFFF>
<H2 ALIGN=CENTER>
恭喜你已经通过了验证,可以直接使用本站点的资源!
</H2></FONT>
'利用Session对象作为注册验证标志
<%session("passed")=true %>
<%end if %>
<%else %>
<FONT COLOR=#FFFFFF><H2 ALIGN=CENTER>
你是内网用户,可以直接使用本站点的资源!
</H2></FONT>
'利用Session对象作为注册验证标志
<%session("passed")=true %>
<%end if %>
</body>
</html>
当然,上面只是实现在一个页面中的验证功能。如果一个网站有多个页面的话,由于我们在上面源程序中设置了一个session变量来对登录的用户进行标志,然后在其他页面中可做如下处理:
<%
'如果未通过验证,返回登录状态
If Not Session("Passed") Then
Response.Redirect "firewall.asp"
End If
%>
(源码下载地址为http://www.cpcw.com/ip.txt)
本文实现网页验证功能采用的是Access数据库,而Access数据库由于可被用户下载,因此其安全性有待加强,或者换用SQL数据库以加强系统的安全性。