Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > .NET > C#.NET > 关于web应用程序安全的思考(五) ---- 一切皆URL
【标  题】:关于web应用程序安全的思考(五) ---- 一切皆URL
【关键字】:web,----,URL
【来  源】:http://www.cnblogs.com/tsoukw/archive/2007/02/01/637106.html

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

Your Ad Here 关于web应用程序安全的思考(五) ---- 一切皆URL - net点滴 - 博客园
博客园 首页 新随笔 联系 聚合 管理
  18 Posts :: 0 Stories :: 123 Comments :: 5 Trackbacks
很抱歉﹐这段时间非常忙(项目﹐考试..)﹐所以好长一段时间都没有更新这个系列﹐同时也谢谢大家的关注﹐我会努力写好并完成这个系列的。

 先总结一下web应用程序安全管控的要点﹕

 

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

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

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

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

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

 

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

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

2.      QueryStringRequest.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的数据。

 

用户每次请求时﹐授权模块的工作流程如下﹕

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.      查找配置文件﹐是否有这个pathquerystring配置﹐如果有﹐则加入QueryStringcurpath(如配置是/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

 

这样就把最精确匹配给查询出来了,也就是说当前的RequestID990003URL

Pathlen   url         id

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

 

好了﹐就到这里吧﹐下一篇我将给出所有框架代码﹐也将完成这个系列

posted on 2007-02-01 15:51 小生 阅读(457) 评论(8)  编辑 收藏 引用 网摘 所属分类: asp.net
Office Outlook同步 很奇怪的BUG:【上一篇】
WPF/E 2007年2月CTP发布了:【下一篇】
【相关文章】
  • 使用gvim配合ant开发完整的java web应用 之gvim篇
  • 配置gvim作为java web项目开发工具
  • 计划任务说明------cron
  • 跟我一起学Windows Workflow Foundation(5)-----使用activity设计器创建一个整合的定制activity
  • 发布一个web菜单控件:EasyMenu
  • 掌握 Ajax,第 6 部分: 建立基于 DOM 的 Web 应用程序
  • 使用 AJAX 的 Sys.Net.WebRequest 从客户端请求网页
  • Web Service Software Factory
  • Windows下安装、配置Weblogic
  • ONJava.com -- Web 服务实现中的概念分离--> 4
  • 【随机文章】
  • Photoshop制作一张个性邮票
  • 从控制台到X-Window抓图攻略
  • Asp无组件生成缩略图 [2]
  • Array类对数组的操作
  • SUN SOLARIS 基准安全清单
  • 如何编写回调函数
  • 实力的终极挑战:RHCE认证难点剖析
  • 关于字符集的测试报告
  • Eclipse中使用Junit插件测试
  • AS3.0下TOMCAT4.1.31+Apache2.0.47的整合
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.