Dreamweaver限制访问的BUG
2008-02-23 06:03:17来源:互联网 阅读 ()
一、步骤叙述:
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
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
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇: 相对路径和绝对路径在网页中的用途
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash