日期:2010-06-22  浏览次数:21067 次

    交互式的Web应用比那些只提供静态Web页面的站点要求考虑更多的安全问题。注册与密码是保护敏感信息最为常用的手段。由于ASP没有直接提供验证用户身份的方法,因此,用户必须执行登录过程以便应用系统保存和提取用户相关信息。
     一、示例站点概貌
     本文通过一个示例站点ASPSecurity说明ASP应用中注册与密码保护的一般实现过程。我们把用户信息保存在Web服务器上的一个Access97数据库中,DSN名称为
  ASPSecurity。唯一的数据库表拥有以下字段:Signon(文本,注册的用户名),Password(文本,密码),LastOn(文本,用户最后一次访问时间),TimedOut
  (是/否,是否由于超时而被系统终止会话)。
  
     系统主要包括以下几个页面:
  
     default.htm —— 重定向浏览器到signon.asp页面。
  
     signon.asp —— 提供登录系统界面。
  
     signedOn.asp —— 成功登录系统之后显示的页面。
  
     register.asp —— 新用户注册页面。
  
     缺省页面default.htm只用于将浏览器重定向到signon.asp登录页面,这由下面这个META标记实现:
  
     < META HTTP-EQUIV="REFRESH" CONTENT="1; URL=signon.asp">
  
     signedOn页面是整个站点唯一受保护的页面,必须经过身份验证才能访问。
   在ASP应用中验证用户身份(2)
  录入人员:asp  发布时间:2005-7-30 19:57:17   (浏览37次)
  
  
  二、初始化以及用户输入合法性检查
     当一个ASP应用启动的时候,IIS就会寻找一个global.asa文件。如果该文件存在,就开始执行Application_onStart。在这里可以初始化应用级的变量和常量。下面的代码在Application_OnStart中初始化一个数组来跟踪任意时刻登录系统的所有用户:
  
  Sub Application_OnStart
  Application("Users") = Array()
  End Sub
  
     在执行Application_OnStart之后,ASP引擎创建一个Session对象并初始化
  SessionID,然后触发Session_OnStart事件。在这里可以初始化会话级(和特定用户相关的)变量和常量:
  
  sub Session_OnStart
  Session.Timeout=1
  ' 数据库DSN
  Session("ConnectionString") = "ASPSecurity"
  Session("ConnectionTimeout") = 15
  ' 读/写方式
  Session("Mode") = 3
  end sub
  
     考虑到用户的浏览器可能不支持Cookies或关闭了Cookies功能,因此必须在第一个ASP页面中检查Cookies的支持情况并把结果保存在一个Session变量中。此外,当用户在登录页面中单击“登录”按钮,还应该检查用户输入的合法性,如下面的代码所示,其中ASPSecurity.inc提供一些公用函数(如signUserOn用于验证用户身份):
  
  < %@ Language=VBScript %>
  < % option explicit %>
  < % Response.buffer = true %>
  < !-- #INCLUDE FILE="ASPSecurity.inc" -->
  < %
  dim aSignon
  dim aPassword
  dim dataValidated
  dataValidated = false
  ' 检查浏览器是否支持Cookies
  Session("SupportsCookies") = (instr(1, Request.ServerVariables
  ("HTTP_COOKIE"), "ASPSESSIONID", vbTextCompare) > 0)
  if Request("Action") = "登录" then
  aSignon = lcase(trim(Request.Form("Signon")))
  aPassword = lcase(trim(Request.Form("Password")))
  if len(aSignon) = 0 then
  Session("msg") = "请输入用户名字."
  end if
  if len(aPassword) = 0 then
  Session("msg") = "请输入密码."
  else
  dataValidated=true
  end if
  if dataValidated then
  if signUserOn(aSignon, aPassword) then
  ' 用户身份被证实,允许进入受保护页面
  Response.Redirect "signedOn.asp?ID=" & Session("ID")
  end if
  end if
  elseif Request("Action") = "注册" then
  Response.Redirect "register.asp"
  end if
  %>
  
  
     对于注册页面,除了要检查用户是否完整地输入所有内容之外,还应该检查两次输入密码是否相同、用户名字是否与数据库中已有记录冲突等。实现代码请参见本文所附的ZIP文件。
  
     由于用户每次启动浏览器连接到服务器时SessionID都是不同的,所以不能直接用它来关联用户与存储在数据库中的相关信息,但SessionID可以用来临时地标识从数据库或文件提取的用户信息。对于那些不支持Cookies的浏览器,可以用另外的方法来创建唯一ID,如下面的getID使用的是随机函数:
  
  function getID() dim numbers
&nbs