日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

博客園(.Net方向應(yīng)用) - 代碼閱讀總結(jié)之ASP.NET StartKit TimeTracker(角色權(quán)限之捉蟲筆記)

 liuqg 2006-03-10

在ASP.NET StartKit TimeTracker中由于程序設(shè)計上的小失誤,我們可以利用這個BUG來達到越權(quán)訪問aspx頁面的能力.

我們都知道該系統(tǒng)定義了三種角色,分別為
Administrator(管理員)
Project Manager(項目管理者)
Consultant(顧問)

只有Administrator角色的用戶才可以訪問管理信息頁面(ProjectList.aspx)

現(xiàn)在我來描述一下錯誤現(xiàn)象:

現(xiàn)在我有一個管理員的帳戶ai_ai@126.com.
我們先用這個帳戶登陸,去創(chuàng)建一個Consultant角色的帳戶:ai_c@126.com
然后馬上關(guān)閉瀏覽器.(注意我這里說的關(guān)閉是用MOUSE點擊瀏覽器關(guān)閉按鈕而不是用程序提供的注銷按鈕)
再打開瀏覽器進入登陸頁,用帳戶:ai_c@126.com登陸系統(tǒng).
這時我們就可以利用顧問角色的帳戶訪問管理信息頁面
http://localhost/TTWebCSVS_cn/ProjectList.aspx?index=2

這個BUG豈不是和系統(tǒng)角色訪問權(quán)限相背.


現(xiàn)在讓我們來找蟲
我們可以看到該系統(tǒng)的登陸用戶角色信息是存放在一個COOKIE中的.
數(shù)據(jù)存放前進行了加密,利用了類FormsAuthentication.Encrypt的靜態(tài)方法.
該COOKIE的名稱在Global中定義為一個常量:
public const string UserRoles = "userroles"
這就是BUG之一

現(xiàn)在我們再看Global中Application_AuthenticateRequest事件中另一段代碼:
Response.Cookies[UserRoles].Value = cookieStr;
Response.Cookies[UserRoles].Path = "/";
Response.Cookies[UserRoles].Expires = DateTime.Now.AddMinutes(1);
從以上我們可以得知,該COOKIE的有效時間是一分鐘.
這樣我們在前一登陸帳戶關(guān)閉后,一分鐘內(nèi)馬上利用另一帳戶登陸,這樣后面的帳戶可以取到前一帳戶的角色信息.
因為2個登陸帳戶用的是同一個叫userroles的COOKIE
這又是BUG之一

為了解決這個BUG,我們可以對程序越微修改
就是把COOKIE名稱唯一化.

在protected void Application_AuthenticateRequest(Object sender, EventArgs e)

在代碼
if (Request.IsAuthenticated == true) 
{
后面添加
string UserRoles=Global.UserRoles+Context.User.Identity.Name;
這樣可以保證每個登陸帳戶的角色信息COOKIE名稱不一樣.

同時注意還要修改,退出按鈕事件 (Banner.ascx.cs中)

private void LogOff_Click(object sender, System.EventArgs e)
        
{
            FormsAuthentication.SignOut();

            
string UserRoles=Global.UserRoles+Context.User.Identity.Name;
            
// Invalidate roles token
            Response.Cookies[UserRoles].Value = "";
            Response.Cookies[UserRoles].Path 
= "/";
            Response.Cookies[UserRoles].Expires 
= new System.DateTime(19991012);

            Context.User 
= null;
            Response.Redirect(
"Default.aspx"false);
        }


當(dāng)然還可以有其他解決辦法
例如把登陸用戶角色信息數(shù)據(jù)放到系統(tǒng)的身份驗證cookie的身份驗票的UserData(Cookie中存儲的用戶定義字符串)中

具體實現(xiàn)可以參考我的另一文章:
代碼閱讀總結(jié)之ASP.NET StartKit TimeTracker(角色權(quán)限)
http://www.cnblogs.com/aierong/archive/2004/12/21/79966.html

謝謝!

最后修改于2005年4月18日

posted on 2005-01-17 14:56 aierong 閱讀(1930) 評論(14)  編輯 收藏 收藏至365Key 所屬分類: asp.net

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多