`

代码阅读总结之ASP.NET StartKit TimeTracker(角色权限之捉虫笔记)

阅读更多

在ASP.NET StartKit TimeTracker中由于程序设计上的小失误,我们可以利用这个BUG来达到越权访问aspx页面的能力.

我们都知道该系统定义了三种角色,分别为
Administrator(管理员)
Project Manager(项目管理者)
Consultant(顾问)

只有Administrator角色的用户才可以访问管理信息页面(ProjectList.aspx)

现在我来描述一下错误现象:

现在我有一个管理员的帐户ai_ai@126.com.
我们先用这个帐户登陆,去创建一个Consultant角色的帐户:ai_c@126.com
然后马上关闭浏览器.(注意我这里说的关闭是用MOUSE点击浏览器关闭按钮而不是用程序提供的注销按钮)
再打开浏览器进入登陆页,用帐户:ai_c@126.com登陆系统.
这时我们就可以利用顾问角色的帐户访问管理信息页面
http://localhost/TTWebCSVS_cn/ProjectList.aspx?index=2

这个BUG岂不是和系统角色访问权限相背.


现在让我们来找虫
我们可以看到该系统的登陆用户角色信息是存放在一个COOKIE中的.
数据存放前进行了加密,利用了类FormsAuthentication.Encrypt的静态方法.
该COOKIE的名称在Global中定义为一个常量:
public const string UserRoles = "userroles"
这就是BUG之一

现在我们再看Global中Application_AuthenticateRequest事件中另一段代码:
Response.Cookies[UserRoles].Value = cookieStr;
Response.Cookies[UserRoles].Path = "/";
Response.Cookies[UserRoles].Expires = DateTime.Now.AddMinutes(1);
从以上我们可以得知,该COOKIE的有效时间是一分钟.
这样我们在前一登陆帐户关闭后,一分钟内马上利用另一帐户登陆,这样后面的帐户可以取到前一帐户的角色信息.
因为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);
        }

 

当然还可以有其他解决办法
例如把登陆用户角色信息数据放到系统的身份验证cookie的身份验票的UserData(Cookie中存储的用户定义字符串)中

具体实现可以参考我的另一文章:
代码阅读总结之ASP.NET StartKit TimeTracker(角色权限)
http://www.cnblogs.com/aierong/archive/2004/12/21/79966.html

谢谢!

最后修改于2005年4月18日

分享到:
评论

相关推荐

    网站框架(基于ASP.net startkit)

    【标题】"网站框架(基于ASP.net startkit)" 指的是一个使用ASP.NET StartKit构建的船务公司网站的基础架构。ASP.NET StartKit是由微软提供的一个开源项目模板,用于快速搭建Web应用程序,特别是针对ASP.NET Core平台...

    C51 StartKit学习板

    ### C51 StartKit 学习板知识点解析 #### 一、C51 StartKit 学习板概述 C51 StartKit是一款专为初学者设计的51单片机及C51语言入门学习系统,由西安电子科技大学测控技术与仪器教研中心研发。该学习板采用低成本的...

    Fusion startkit高级实验例程

    在本文中,我们将深入探讨"Fusion Startkit"高级实验例程,这是一套专为Actel FPGA(现场可编程门阵列)设计的实践教程,适用于周立功Fusion Startkit开发板。此套例程旨在帮助用户在Libero IDE 8.0环境下提升FPGA...

    StartKit串口调试助手使用说明1

    【StartKit串口调试助手使用说明1】 StartKit串口调试助手是一款专为物联网设备调试设计的工具,它提供了一种简单易用的界面来配置串口通信参数,并且具有丰富的菜单功能,如日志管理和AT命令操作。下面将详细介绍...

    Fusion startkit资料-实验例程-基础实验

    周立功Fusion startkit资料的实验例程的基础实验部分,libero ide8.0版本下运行

    周立功Fusion StartKit,fpga开发板的实验例程,adc

    周立功Fusion StartKit是一款专门用于FPGA(Field-Programmable Gate Array)开发的实验平台,旨在帮助用户快速理解和实践FPGA设计。ADC(Analog-to-Digital Converter)是该开发板上的一个重要组件,它能够将模拟...

    sw_startkit_examples:startKIT 开发板的示例代码

    startKIT 开发板示例 最新发布: 1.2.0rc0 维护者: 达维尔克斯莫斯 描述: startKIT 示例程序 所需软件(依赖项) sc_i2s ( :xcore/sc_i2s) sc_i2c ( :xcore/sc_i2c) sc_slicekit_support ( ) sw_audio_...

    基于开发板的开发指南_StartKit_NB_V1.0 (1)1

    【基于开发板的开发指南StartKit_NB_V1.0】是中国电信集团公司于2019年9月发布的一份详细指导文档,旨在帮助开发者利用特定的开发板进行NB-IoT(窄带物联网)通信卡的开发工作。该文档主要分为六个部分,包括清单...

    周立功Fusion StartKit,fpga开发板的实验例程electric current

    周立功公司是一家知名的电子技术企业,提供各种FPGA开发工具和解决方案,包括Fusion StartKit开发板。这个"electric current"标签的实验例程是针对FPGA开发板上的电流监控功能进行的,旨在帮助开发者学习如何利用...

    ProASIC3 StartKit开发板原理图-周立功

    ### ProASIC3 StartKit开发板原理图解析 #### 核心概述 ProASIC3 StartKit是一款专为Actel公司的ProASIC3系列FPGA设计的开发板。该开发板旨在为工程师提供一个易于使用的平台,以便进行原型设计、评估以及开发基于...

    周立功Fusion StartKit,fpga开发板的实验例程Flash Memory RAM

    周立功是一家专注于嵌入式系统与FPGA技术的公司,他们推出的Fusion StartKit是专为FPGA初学者和开发者设计的一款开发板,集成了丰富的功能和实验例程,帮助用户快速上手FPGA应用。 本实验例程重点围绕"Flash Memory...

    VisualSVN Server的配置和使用方法

    - 使用“Add...”按钮将用户添加到权限列表,并根据角色赋予不同权限。 - starter拥有只读权限,Tester1同样,Developer1和Manager1具有读写权限。 - 可以通过Groups管理多个用户,简化权限分配。 5. **...

    SVN服务端与Tortoise客户端的配置方法

    可以将用户添加至特定代码库,并根据角色为其设定不同的访问权限。例如,新入职的员工(如用户`starter`)通常只拥有读取权限;测试人员(如用户`tester1`)也需要读取权限但通常不参与编码;而开发者(如`Developer...

    1.2、网络文件 VisualSVN Server的配置和使用方法(项目部署到svn上)1

    总结,VisualSVN Server提供了一种有效的方式来管理和控制项目代码版本,而TortoiseSVN作为客户端工具,使得开发者能够方便地进行代码签入、签出和版本控制。通过合理的权限分配,团队成员可以协同工作,确保代码的...

    SVN服务器安装文档

    - 如果遇到权限问题,如无法签入或签出代码,检查用户在`VisualSVNServer Manager`中的权限设置。 - 调整相应用户的权限,确保其拥有正确的访问级别。 **2. 客户端连接问题** - **连接失败**: - 如果...

    ACTEL A3P StartKit FPGA开发全套文挡(含测试源码)

    ACTEL A3P StartKit是一款基于ACTEL A3P1000 FPGA的开发套件,为FPGA设计者提供了一站式的硬件和软件开发环境。这个开发套件旨在简化A3P1000 FPGA的评估、学习和设计过程,帮助工程师快速实现其创新项目。其中包含的...

Global site tag (gtag.js) - Google Analytics