首页 > 办公 > Dreamweaver > 正文

Dreamweaver 限制访问的BUG-Dreamweaver教程

2024-09-12 12:30:24
字体:
来源:转载
供稿:网友

一、步骤叙述:

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



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表