当前位置: 首页 > 图文教程 > 网页制作 > Dreamweaver > Dreamweaver 限制访问的BUG

Dreamweaver
Dreamweaver 限制访问的BUG
Dreamweaver 数据库路径的使用
用Dreamweaver做搜索表单
Dreamweaver 事件简述
[Dreamweaver教程]Meta标签详解
提高 Dreamweaver行为全接触(5)
提高 Dreamweaver行为全接触(1)
提高 Dreamweaver行为全接触(3)
提高 Dreamweaver行为全接触(2)
提高 Dreamweaver行为全接触(4)
Dreamweaver MX2004视频宝典教程(7) Dreamweaver安装与启动
Dreamweaver MX2004视频宝典教程(9) 工作区结构
Dreamweaver MX2004视频宝典教程(5) 配色原则
Dreamweaver MX2004视频宝典教程(4) 网页布局
Dreamweaver MX2004视频宝典教程(8) Dreamweaver文档使用
Dreamweaver MX2004视频宝典教程(10) 菜单概述
Dreamweaver MX2004视频宝典教程(3) 网页的基本元素
Dreamweaver MX2004视频宝典教程(6) HTML与渲染
Dreamweaver MX2004视频宝典教程(1) 课程简介
Dreamweaver MX2004视频宝典教程(2) 网站与网页的概述

Dreamweaver 限制访问的BUG


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-23   浏览: 67 ::
收藏到网摘: n/a

一、步骤叙述:

1、文件mysite.mdb,其中两个表:admininfo(表示管理员的记录表)和memberinfo(普通用户的记录表)

2、普通用户登陆页 login.asp ,添加行为时候,选择基于用户名和密码的访问。即表示产生了 Session("MM_Username") (其值即为当前正确登陆的用户名)。因为此时为选择访问级别,所以代表访问级别的 Session("MM_UserAuthorization") = ""

3、普通用户登陆成功页 personal.asp,服务器行为“限制对页访问”同样设置为用户名和密码的访问。实质是判断Session,即可实现“限制对页的访问”。

以上2→3均能正常,接着就开始出现问题了。

4、管理员登陆页 adminlogin.asp ,添加服务器行为时候,选择基于用户名、密码和访问级别的访问(当然这要求admininfo表中必须具有表示访问级别的字段)。生成Session("MM_Username") (其值即为当前正确登陆的管理员名),同时生成表示访问级别的Session("MM_UserAuthorization") = CStr(MM_rsUser.Fields.Item(MM_fldUserAuthorization).Value)

5、管理员登陆正确页 admin.asp,很显然,服务器行为“限制对页访问”必须选择“用户名、密码和访问权限的访问”,级别的定义值即是admininfo表中表示访问级别字段的值。同样也能实现“限制对页的访问”。

二、BUG来了

1、普通用户登陆。
2、正确登陆。
3、将URL地址直接切换为“admin.asp”的地址。
4、完全可访问。

注:在admin.asp提取Session("MM_UserAuthorization") 是为空值,而当从adminlogin.asp正确登陆到adming.asp提取Session("MM_UserAuthorization") 值为数据库表中相应字段的值

得出结论:代表权限的访问级别没有起效。Session("MM_UserAuthorization") 针对同一站点同一数据库不同表时——形同虚设!

三、原理分析

在管理员登陆成功页中,有如下代码是用来进行“限制对页访问的”

' *** Restrict Access To Page: Grant or deny access to this page
MM_authorizedUsers="administrator"
MM_authFailedURL="adminlogin.asp"
MM_grantAccess=false
If Session("MM_Username") <> "" Then
  If (false Or CStr(Session("MM_UserAuthorization"))="") Or _
         (InStr(1,MM_authorizedUsers,Session("MM_UserAuthorization"))>=1) Then
    MM_grantAccess = true
  End If
End If

If Session("MM_Username") <> "" Then

如果表示用户的Session不为空,即可MM_grantAccess = true,当然,其中还有嵌套IF。

    

If (false Or CStr(Session("MM_UserAuthorization"))="") Or (InStr(1,MM_authorizedUsers,Session("MM_UserAuthorization"))>=1) Then

因为MM_authorizedUsers="administrator",这里的"administrator"是级别的定义值,即是admininfo表中表示访问级别字段的值

所以,其只能限制admininfo表的访问级别(非administrator)的管理员的访问,而对于普通会员而言,其Session("MM_UserAuthorization")值为空,同样可访问该权限页面。

这就是BUG所在!

四、目前解决方案

1、要做基于用户名、密码和访问级别的访问,必须是同一数据库表中的。即将普通会员和管理员的信息都保存在同一表中,区分他们权限的方法即是添加一个代表权限的字段,使得他们具有不同的值。

当然,这不是很完整的,很多情况需要将两个表分开,那么则可以用如下方法:

2、当基于用户名、密码和访问级别的访问,在代码 

If Session

("MM_Username") <> "" Then 

继续添加内容

and Session("MM_UserAuthorization") <> "" ,即最后为:

If Session("MM_Username") <> "" and Session

("MM_UserAuthorization