it167.com  设为主页
 收藏本站
 
  资讯:业界动态 | 软件动态 | 人物专栏 | 安全资讯 | 网络生活 | 电子商务 | 小游戏 | 视频 | 美女图片 | 音乐
  网络编程 | 网站运营 | 网页制作 | 图形图象 | 操作系统 | 媒体动画 | 软件教学 | 网络应用 | 邮件系统 | 网络安全 | 认证考试
asp | .net | php | jsp | Sql | java | Dreamweaver | FrontPages | Javascript | css | Coreldraw | photoshop | Flash | Coreldraw
当前位置: > 主页>网页设计>Dreamweaver>dreamweaver应用实例>Dreamweaver 用户身份验证的BUG
最新新闻

·机会与整合 边缘化互联
·TOM-Skype新增三大本地
·雅虎抢闸邮箱竞赛 网易
·新浪抢攻北京奥运
·洞悉网络口碑的掘金机会
·拆解网络病毒黑金交易
·木马下载器近期出现新变
·《互联网周刊》第17期文
·Web2.0是否催生自吹自擂
·三张宝宝裸照招来MSN封
热门新闻
·用Dreamweaver MX制作文
·在状态栏中实现活动文字
·DW MX实例:动态广告管
·自己动手制作活动菜单条
·DW MX 2004 制作树状菜
·网页滚动的QQ在线咨询功
·用Dreamweaver插件制作
·用DW MX造站内搜索
·DW滑动菜单的制作
·鼠标事件的基础和完美实
推荐新闻
 
 

Dreamweaver 用户身份验证的BUG 

作者:   来源:it167   点击:   日期:2007-01-27


Dreamweaver 用户身份验证(限制对页访问)的BUG

一,步骤叙述:

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
over,the end:)



文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·自己动手制作活动菜单条 ·DW MX 2004 制作树状菜单
·DW MX实例:动态广告管理 ·网页滚动的QQ在线咨询功能 Dreamweaver实
·在状态栏中实现活动文字效果 ·用Dreamweaver插件制作滚动链接层

   文章评论:(0条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:it167  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。