首页 / 网页编程 / ASP.NET / 代码阅读总结之ASP.NET StartKit TimeTracker(角色权限之捉虫笔记)
        
            代码阅读总结之ASP.NET StartKit TimeTracker(角色权限之捉虫笔记)2012-01-18 博客园 aierong在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之一