田贤追博客 - QQ:260776893,Tel:13065860667

网站建设电子商务博客(网站制作,优化推广,网络营销宣传,B2B,网络广告),网络维护,平面设计及相关的文章信息发布共享。

« ASP网页数据库的操作在贴子中实现超文本信息输入和显示 »

ASP网页安全性的实现方法

我们知道在用浏览器浏览HTML网页时,浏览器会将HTML文件原封不动地全部下载下来,然后再由浏览器解释执行,因而很容易就能看到HTML文件的全部源代码,这对于那些含有保密内容的网页来说是十分不安全的。为了提高网页的安全性,我们采用了ASP网页,前面说过,ASP网页是一种动态网页,它是由服务器中的ASP程序运行产生的动态页面,而ASP的源代码又是全部保存在服务器上的,所以从客户端的角度,ASP源代码是保密的。所以,我们可以利用ASP网页ASP源代码的保密性来实现ASP网页只能被具有相应权限的合法用户访问。
本BBS论坛系统有会员身份权限限制的功能网页相当多,频繁地要求用户输入用户名以及密码,然后比较数据库中会员注册表数据以确认用户身份,再根据用户的身份来确定是否具有本网页的访问权,将会消耗大量的服务器资源,极大地增加Web服务器的负担。此时,我们可以利用ASP的内置对象Session。
当一位尚未建立Session对象的用户浏览到WEB站点的ASP程序时,ASP就会自动产生一个新的Session对象,并且指定唯一的SessionID编号。此后,在浏览此ASP程序和即将在站点内浏览其它ASP程序的过程,我们称为一个Session期间。WEB服务器可以凭借读取ASP程序时传送的SessionID判断用户是否仍在Session期间,直到Session对象TimeOut属性所设置的时间,默认为20分钟或执行Abandon方法。每当读取新的ASP程序后,TimeOut属性都会归零,重新计算,所以除非没有浏览站点,否则Session期间绝对超过20分钟。
每一位用户都可以拥有一组专用的Session变量。虽然每位用户的Session变量名称相同,但是其内容可就不同,而且只有该用户拥有权利读写自已的Session变量,我们可以利用Session的这个特性来实现ASP网页的安全保护。
在本系统设计了一个ASP网页userlog.asp,如果用户想以普通会员的身份发表贴子,或以版主身份管理版面,或以超级管理员身份进行论坛管理,则用户在进入系统之前必须通过userlogin.asp进行登录,login.asp会将用户输入的用户名及密码拿来与数据库中的资料相对比,以确定用户的合适身份,否则,用户只能以匿名用户身份浏览本论坛贴子,却不能发表贴子或回复贴子,当然更不能进行论坛的相关管理操作了。用户的身份将被写入Session对象的username以及adminboard变量,username保存其会员名称,adminboard保存其操作权限,为“0”则其为超级会员,为空则为普能会员,为版面ID则为版主。
userlog.asp源代码如下:
<!--#include file="dbconrw.asp"-->
<%
response.expires=0
On Error Resume Next
Dim strUserName
Dim strSQL,objRS
strUserName=Request.Form("username")
strUserPassword=Request.Form("password")
strSQL="SELECT * FROM userlist WHERE username='" & strUserName & "'"
set objRS=objDBConn.Execute(strSQL)
session("username")=""
session("adminboard")=""
Dim bLogSucc,repmsg,reptxt,repurl
If objRS.EOF Then
'User Doesn't Exists
   bLogSucc=0
   repmsg="此用户不存在"
   repurl="userlog.asp" 
   reptxt="请重新登录"
Else
'User Exists
  If objRS("password")=strUserPassword Then
     bLogSucc=1
     session("username")=strUserName
     repmsg="欢迎" & strUserName & ",您已登录成功"
     repurl="main.asp"
     reptxt="返回论坛首页"
  Else
   bLogSucc=0
   repmsg="密码输入错误"
   repurl="userlog.asp"
   reptxt="请重新登录"
  End if
End If
%>
<!--#include file="dberror.asp"-->
<%
objRS.Close
'Judge if super administrator or board manager
if bLogSucc=1 then
   strSQL="SELECT * FROM adminorlist WHERE username='" & strUsername & "'"
   set objRS=objDBConn.Execute(strSQL)
   if err.number<>0 then
      response.write "数据库操作失败:"&err.description
   end if
   If Not objRS.EOF Then
      if objRS("status")="Y" then
         session("adminboard")=Cint(objRS("manbid"))
      end if
   end if
'Write Log
   objRS.close
   strSQL="INSERT INTO loginfo(userid,userip,intime)"
   strSQL=strSQL & "VALUES('" & strUserName & "','"
   strSQL=strSQL & request.servervariables("remote_host") & "','"
   strSQL=strSQL & now() & "')"
   set objRS=objDBConn.execute(strSQL)
   if err.number<>0 then
      response.write "数据库操作失败:"&err.description
   end if
end if
objRS.close
objDBConn.Close
Set objRS=Nothing
Set objDBConn=Nothing
%>
<html><body>
<table align='center'>
<tr><td align='center'><%=repmsg%></td></tr>
<tr><td align='center'>
<font color="#336699">
<a id="reinput" href="<%=repurl%>"><%=reptxt%></a></font>
<SCRIPT language="javascript" type="text/javascript">
setTimeout("location.href = reinput.href",1000);
</SCRIPT>
</td></tr>
</table>
</body></html>
确定了用户的会员身份以后,在每个需要进行身份识别的ASP网页插入身份识别代码,如果此用户具有访问这个ASP网页的权限,则输出其相应的HTML文件,否则,系统转到用户登录网页要求用户重新登录以取得访问此ASP功能网页的合法身份。例如,论坛基本信息设置ASP网页需要访问者具有超级会员身份,在本网页前必须插入以下一段代码:
<%
'Check the Super Administrator Right
Response.Expires=0
if Session("adminboard") <> "0" Then
   Response.redirect "userlog.asp?errmsg=您没有超级用户管理权限,请重新登录或退出!"
End If
%>

 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Walle Build 91204

© 2007-2009 Powered By 田贤追博客 All rights reserved. 浙ICP备09005319号·