您现在的位置是: 网站设计 ->设计教程 ->网页设计 ->Dreamweaver ->
本文关键字: dreamweaver
Google
 
Dreamweaver 限制访问的BUG
作者: 开心 | 发布时间: 2008-06-08 19:05 | 信息类别: Dreamweaver | 访问人次:
评论 推荐 打印 编辑 】 【 关闭
  

  


一,步骤叙述:


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") <> "" Then


注意:当基于用户名、密码和访问级别的访问时,才可以修改(因为有访问级别,就表示有Session("MM_UserAuthorization") );而只当基于用户名和的访问时,则不需要。


五、最后的建议


当然,这个建议最好给MM公司,即是:当基于用户名、密码和访问级别的访问时,代码判断行和当基于用户名和的访问时,要不一样,应该是:


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

『相关链接』
序号
标题 发布日期
1
2008-06-08 19:05:04
2
2008-06-08 19:05:04
3
2008-06-08 19:05:04
4
2008-06-08 19:05:04
5
2008-06-08 19:05:04
6
2008-06-08 19:05:04
7
2008-06-08 19:05:04
8
2008-06-08 19:05:04
9
2008-06-08 19:05:04
10
2008-06-08 19:05:04
    查看所有相关的信息...
【郑重声明】【上海IT外包服务网】 刊载此文不代表同意其说法或描述,仅为提供更多信息,也不构成任何投资或其他建议。转载需经作者本人同意并注明出处。本网站有部分文章是由网友自由上传。对于此类文章本站仅提供交流平台,不为其版权负责。如果您发现本网站上有侵犯您的知识产权的文章,请发信至 或直接电话联系: 021-58879030
请您留言
『发表评论』
匿名发表 会员ID: 密码:

上海蝶应信息科技有限公司
上海市商城路341号紫光大厦1305室 +0086-21-58878998 11394019
dieying@541help.com +0086-21-58879030HappyFreeAngel@hotmail.com
Copyright@2007 IT-WAIBAO.COM Inc.沪ICP备05039378号 版权所有2007-2010 管理员登陆