WEB开发网
开发学院网络安全安全技术 关于web应用程序安全的思考(五) ---- 一切皆U... 阅读

关于web应用程序安全的思考(五) ---- 一切皆URL

 2008-11-26 13:35:50 来源:WEB开发网   
核心提示:先总结一下web应用程序安全管控的要点﹕ 1.在每次客户端请求(Request)时进行安全管控(原因和作法请参考思考2)2.安全管控分为认证和授权(二者完全分离﹐单独实现﹐参考思考2的代码示例)3.认证即识别请求者是谁(提取用户标识或匿名登录)(作法简单﹐一般采用Session或Cookie实现)4.授权即判断用户是否

先总结一下web应用程序安全管控的要点﹕关于web应用程序安全的思考(五) ---- 一切皆URL

1.   在每次客户端请求(Request)时进行安全管控(原因和作法请参考思考2)

2.   安全管控分为认证和授权(二者完全分离﹐单独实现﹐参考思考2的代码示例)

3.   认证即识别请求者是谁(提取用户标识或匿名登录)(作法简单﹐一般采用Session或Cookie实现)

4.   授权即判断用户是否有被请求的资源(URL)的权限(本篇解释)

5.   如果没有权限就转入无权处理过程,由它视相关的情形向用户报错(如aspx和asmx的报错过程应该不一样)。

要判断用户是否有被请求的资源的权限﹐首先就要知道用户请求的是什么资源。所以我将资源进行抽象﹐并且称它为URL。URL预设有3种形式﹐分别是﹕

1.   Request.Path,这是最基本的形式。如:a.aspx , b/b.aspx , ajax/c.ashx

2.   带QueryString的Request.Path﹐这种形式增大了权限管控组件的适应性和灵活性(可参考上一篇的例子)。如 d.aspx?kind=1 , c/e.aspx?ismanage=Y

3.   只到某个目录的Request.Path﹐这种形式方便了某些权限简单的系统使用。如 f/ , g/h/

怎样建立URL呢?

对每个系统功能﹐列出实现这个功能必须要访问哪些程序。如实现”系统管理”包括manage目录下的所有程序﹐还包括common/listuser.aspx程序﹐还包括adduser.aspx?kind=1这支程序(adduser.aspx?kind=2属于”用户管理”功能)﹐这样建立三笔URL的数据。

用户每次请求时﹐授权模块的工作流程如下﹕关于web应用程序安全的思考(五) ---- 一切皆URL

1.   每次用户Request时﹐首先把这个Request通过URL组织模块提取成一个URL字符串。

2.   然后到URL表中抓取相应的URL

3.   找到这个URL属于的系统功能(可能有多个)

4.   依次判断用户ID是否与任一系统功能ID有对应就表示用户有权限。

在上述过程中﹐第1步的URL组织模块组织什么样的URL进去查询最重要﹐组织过程是这样的﹕

1.   默认提取到Request.Path﹐以下为示例代码

String curpath = HttpContext.Current.Request.Path.ToLower().Split(new char[] { '?' })[0].Replace("", "/");

2.   查找配置文件﹐是否有这个path的querystring配置﹐如果有﹐则加入QueryString到curpath中(如配置是/a/b/c.aspx?kind﹐则要在curpath里再加上这个QueryString参数和实际值)

第2步的查询方式可以通过以下sql代码查询

SELECT top 1 (len([Url])) pathlen,url,id

FROM URLM

where '/a/b/c.aspx?kind=1'like Url + '%'

order by pathlen desc

假设表中数据为﹕

990001

/a/b

990002

/a/b/c.aspx

990003

/a/b/c.aspx?kind=1

990004

/a

990005

/a/b/d.aspx

990006

/a/d

990007

/a/b/c.aspx?kind=2

这样就把最精确匹配给查询出来了,也就是说当前的Request是ID为990003的URL

Pathlen  url     id

18  /a/b/c.aspx?kind=1  990003

Tags:关于 web 应用程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接