成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

Dreamweaver 限制訪問的BUG

2010-08-28 10:46:24來源:西部e網作者:

    一,步驟敘述:

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

關鍵詞:Dreamweaver

贊助商鏈接:

主站蜘蛛池模板: 胶南市| 蒲江县| 河南省| 忻城县| 通化市| 湘潭县| 会东县| 新余市| 石嘴山市| 大城县| 博罗县| 榆社县| 沾化县| 伊宁市| 诏安县| 江陵县| 北京市| 吴江市| 永安市| 巴塘县| 平利县| 思茅市| 旬邑县| 宜良县| 开化县| 阿合奇县| 萨嘎县| 廉江市| 芜湖县| 洮南市| 嘉鱼县| 宜阳县| 新巴尔虎左旗| 和政县| 民县| 调兵山市| 宜良县| 阿拉善右旗| 宜兰市| 宜阳县| 滨州市|