时间: 2021-07-31 作者:daque
一、办法报告:
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 pagemm_authorizedusers="administrator"mm_authfailedurl="adminlogin.asp"mm_grantaccess=falseif 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 ifend 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