你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
用ASP实现基于数据库的网页加密
 

一、问题提出背景

    在建立网站的过程中,有些网页只允许好友或会员可以浏览,我们称这种网页为加密网页。加密网页的方法很多,如:直接用客户端Script程序而不用数据库进行的加密、用CGI程序进行的加密等,前者由于在客户端执行而使加密的网页很脆弱,后者编程复杂需要有丰富的编程经验,使得这两种方法对于一般的网页设计者来说都不是最佳的选择。本文的密码验证程序是基于Windows NT 4.0(IIS 4.0)环境下的ASP程序,用加密的mdb数据库来存放“用户名称/密码”,利用ASP自带的内部对象对数据库对数据库进行操作,来验证密码和用户名的正确与否,从而打到网页加密的目的。由于使用加密的数据库,即使数据库被其他上网者下载也无法看到“用户该程名称/密码”,所以保密性好,而且利用ASP自带的6大对象,使得数据库访问非常方便,编程异常简单。

二、ASP简介

    Active Server Page Microsoft提出的一种服务器端的命令执行环境。随着Windows NTWindows 2000)的普及,其上所带的Web Server(IIS2.0/3.0/4.0)也被越来越多的应用于公司、企业内部intranet或连外的internetWeb服务器,所以ASP(Active Server Page,服务器端的动态网页)理所当然的成为广泛应用的Web程序开发工具。

    Active Server Page的出现使Web页面更加多彩多姿;利用Microsoft Active Server Page技术,将Script程序代码嵌入HTML文件,创造出动态变化的Web页面。在过去,使用JavascritptVBScript开发的Web页面,必须由客户端支持这两种语言的浏览器执行出程序代码的结果,而Active Server Page使我们方便的利用所熟悉的JavascriptVBScripts甚至PERL来开发Web服务器端动态HTML文件;所以,不管任何是否支持JavaScriptVBScript的浏览器,通过Active Server Page技术产生出来的Web页面,将可以摆脱不兼容的问题。

    一般,ASP Web页面可以同时包含下面四个部分:

1、  普通HTML文件:普通Web页面的编程。

2、  客户端Script程序代码:<SCRIPT></SCRIPT>间的程序代码。

3、  服务器端ASP Script程序代码:位于<%……….%>间的程序代码。

4、  ServerSide Include语句:使用#INCLUDE的语句在Web页面中嵌入其他Web页面。

 

三、网页加密

    网页加密功能的实现由三个文件组成:users.mdbpassword.aspPwdpage.aspusers.mdb是存放“用户名称/密码”的ACCESS数据库;password.asp是加密网页的精髓,该程序实现“用户名称/密码”输入表单的制作、数据库读取及密码验证等功能;Pwdpage.asp是需要加密的网页。下面对这三个文件分别介绍。

1、  加密的users.mdb数据库

users.mdb是使用Access加密的数据库,建立步骤如下:

1)启动Access“文件->新建”选择合适目录输入文件名为users.mdb,然后按“确定”键建立数据库“users.mdb”。如图1

1建立users.mdb数据库

2)建立表users:使用表设计器创建表,该表只包含两个字段,如下所示:

               

字段名称

数据类型

数据长度

字段说明

ID

文本

20

用户名称

Pwd

文本

20

密码

 

3)接着选菜单“工具->安全->设置数据库密码“,如图2

2设置数据库密码

ASP程序中如何启动含有密码的数据库呢?其实很简单,只要在Connection对象的Open方法中增加Pwd的参数即可,例如:

SQLstr=”driver:{Microsoft Access Driver (*.mdb)};Pwd=ding”

SQLstr=SQLstr&”;dbq=”&server.MapPath(“users.mdb”)

Conn.open SQLstr

2、网页加密的核心:password.asp

    password.asp文件又可分为三个子程序段:

    1)“用户名称/密码”的输入表单,程序片断如下:

<HTML>

<BODY BGCOLOR="#FFFFFF">

<H2 ALIGN=CENTER><%=Head%><HR WIDTH="100%"></H2>

<CENTER>

<FORM Action=<%=Request.ServerVariables("PATH_INFO")%> Method=POST>

<TABLE BORDER=1 CELLSPACING=0 >

<TR>

<TD ALIGN=RIGHT>用户名称:</TD>

<TD><Input Type=Text Name=ID Size=12 Value=<%=ID%>></TD>

</TR>

<TR><TD ALIGN=RIGHT>密码: </TD>

<TD><Input Type=Password Name=Pwd Size=12 Value=<%=Pwd%>></TD>

</TR>

</TABLE><P>

<Input Type=Submit Value=" 确定 ">

</FORM>

<HR WIDTH="100%">

</CENTER>

</BODY>

</HTML>

    重点是<FORM>标记的Action参数,一般来说,我们会指定给它某一个.asp文件名称,例如:Password.asp,在此则指定成:Request.Server variables(“PATH_INFO”);如果password.asp被含入Pwdpage1.asp,则这个参数得到Pwdpage1.asp,如果password.asp被含入Pwdpage2.asp,则这个参数得到Pwdpage2.asp,所以无论Password.asp文件被包含进哪一个网页,以上语句都能得到正确的.asp文件名称。

    2)密码验证函数:

接下来是实现密码验证的函数,这个函数传人ID(用户名称)及Pwd(密码),若验证通过返回TRUE,否则返回FALSE,内容如下:

<%

Function checkpassword( ID, Pwd )

   Dim conn, SQLstr, rs

   Set conn = Server.CreateObject("ADODB.Connection")

   SQLstr = "driver={Microsoft Access Driver (*.mdb)};Pwd=ding"

   conn.Open SQLstr & ";dbq=" & Server.MapPath("users.mdb")

   sql = "Select * From users Where ID='" & ID & "' And Pwd = '" & Pwd & "'"

   Set rs = conn.Execute( sql )

   If rs.EOF Then

      checkpassword = False

   Else

      checkpassword = True

   End If

End Function

%>   

这段程序的关键点是:users.mdb是一个加密的数据库,所以启动时必须有“Pwd=ding”参数;用Select选取符合条件的数据记录,若为0则表示ID/Pwd是错误的,返回False,否则表示ID/Pwd是正确的,返回True

3)密码验证与输入表单的结合

下面的这段服务器端执行的程序实现密码验证与输入表单的结合:

<%

If IsEmpty(Session("Passed")) Then Session("Passed") = False

Head = "请输入您的认证资料"

ID = Request("ID")

Pwd = Request("Pwd")

If ID = "" Or Pwd = "" Then

   Head = "请输入您的认证资料"

ElseIf Not checkpassword( ID, Pwd ) Then

   Head = "用户名称或密码错误"

Else

   Session("Passed") = True

End If

If Not Session("Passed") Then

%>

<HTML>

输入表单程序部分

</HTML>

<%

   Response.End

End If

%>

    Session(“Passed”)的功能是记录连接者是否已经通过密码验证,如果已通过验证,则下次浏览该网页时就不用再输入用户名称及密码了。

3、需要加密的网页:Pwdpage.asp

实际上,Pwdpage.asp可以是任何已制作好的.asp网页,如想对该网页加密,只需把users.mdbPassword.asp复制到Pwdpage.asp所在的目录下,并在文件头加入下列语句:

<!--#include file=”password.asp”à即可实现对网页的加密。

四、程序清单

1、  Password.asp

<%

Function checkpassword( ID, Pwd )

   Dim conn, SQLstr, rs

   Set conn = Server.CreateObject("ADODB.Connection")

   SQLstr = "driver={Microsoft Access Driver (*.mdb)};Pwd=ding"

   conn.Open SQLstr & ";dbq=" & Server.MapPath("users.mdb")

   sql = "Select * From users Where ID='" & ID & "' And Pwd = '" & Pwd & "'"

   Set rs = conn.Execute( sql )//以上为执行数据库打开、比较的部分。

   If rs.EOF Then

      checkpassword = False

   Else

      checkpassword = True

   End If

End Function

%>

<%

If IsEmpty(Session("Passed")) Then Session("Passed") = False

//当上网者已经输入密码时Session(“Passed”)不为空,则不在执行Password.asp页。

Head = "请输入您的认证资料"

ID = Request("ID")

Pwd = Request("Pwd")

If ID = "" Or Pwd = "" Then

   Head = "请输入您的认证资料"

ElseIf Not checkpassword( ID, Pwd ) Then

   Head = "用户名称或密码错误"

Else

   Session("Passed") = True

End If

If Not Session("Passed") Then

%>

 

<HTML>

<BODY BGCOLOR="#FFFddd">

<H2 ALIGN=CENTER><%=Head%><HR WIDTH="100%"></H2>

<CENTER>

<FORM Action=<%=Request.ServerVariables("PATH_INFO")%> Method=POST>

//Action参数是关键

<TABLE BORDER=1 CELLSPACING=0 >

<TR>

<TD ALIGN=RIGHT>用户名称:</TD>

<TD><Input Type=Text Name=ID Size=12 Value=<%=ID%>></TD>

//IDcheckpassword函数中获得

</TR>

<TR><TD ALIGN=RIGHT>密码: </TD>

<TD><Input Type=Password Name=Pwd Size=12 Value=<%=Pwd%>></TD>

//Pwdcheckpassword函数中获得

</TR>

</TABLE><P>

<Input Type=Submit Value=" 确定 ">

</FORM>

<HR WIDTH="100%">

</CENTER>

</BODY>

</HTML>

 

<%

   Response.End

End If

%>

2、  Pwdpage.asp

<!--#include file="password.asp" -->

//把此语句加入需要加密网页的最前面

<HTML>

<BODY BGCOLOR="#FFFFdd">

<H2>加密的网页 <HR></H2>

<P>这个网页十分简单,只要在原始码的最前面加上以下标识:</P>

<UL>

<P><FONT COLOR="#FF0000">&lt;!--#include file=&quot;

<B>password.asp</B>&quot;--&gt;</FONT></P>

</UL>

<P>就已经具备加密的功能。快快试试吧!

<HR WIDTH="100%"></P>

</BODY>

</HTML>

五、总结

        本文网页加密的关键是Password.asp程序,要做到正常运行,必须使得users.mdb数据库中的表users的字段名称与Password.asp引用的字段名称相一致。一旦users.mdbPassword.asp两个文件正确建立后,就可以一劳永逸,对任何.asp文件都可以轻松加密。总之,利用微软的Active Server Page技术开发的程序简单,而且代码重用性高,ASPADO的完美结合,使得开发网络数据库程序不在是非常困难的事了。

 

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089