APP下载

ASP.NET安全模型探究

2012-02-08汪澍萌

湖南邮电职业技术学院学报 2012年3期
关键词:应用程序编程架构

汪澍萌,张 硕

(扬州市职业大学,江苏扬州 225009)

ASP.NET安全模型探究

汪澍萌,张 硕

(扬州市职业大学,江苏扬州 225009)

安全是Web应用程序的重要组成部分。文章通过剖析ASP.NET安全模型,提出创建基于ASP.NET Web应用程序的安全编程原则,使开发者能够创建更为安全的Web应用程序。

ASP.NET安全模型;身份验证;授权;上下文;安全编程原则

为开发出安全可靠的ASP.NET Web应用程序,在开发伊始就要考虑安全性问题,这样才可能在创建架构和设计时,对安全问题做出正确的决策。因此,开发人员对ASP.NET安全模型的正确理解,就显得尤为重要了。本文将剖析ASP.NET安全架构,并提出基于Web应用程序开发的安全编程的原则。

1 剖析ASP.NET安全模型

为开发安全的基于ASP.NET Web应用程序,首先必须了解ASP.NET安全模型。

1.1 安全级别

创建和设计安全的程序架构首先要了解系统的运行环境,比如用户、登录点和潜在的可能攻击点的威胁。对于基于ASP.NET Web应用程序,实现安全的基本任务包括以下几个方面:

验证:是指发现一个用户的身份并保证此身份真实性的过程。在ASP.NET应用程序中,提供了四种验证系统:Windows验证、表单验证、Passport验证和自定义验证流程。在每种验证系统中,用户都必须在登录时提供一些证明信息,之后系统将根据验证类型的不同而采取不同的方式来跟踪用户身份。所有的验证都允许程序在处理每一次请求时识别用户的身份,用以满足个性化和定制化的需要。

授权:是指决定分派给已验证用户权力和限制的过程。如检查用户的身份以决定是否具有继续某个特定操作的权限、禁止某些用户或角色访问特定的网页或者文件夹等。

机密性和数据完整性:是指数据在网络传输过程中或在数据存储时不会被未经授权的用户查看和修改。二者的实现都以加密为基础。

因为Web应用程序使用无状态的HTTP,所以不会在请求之间保持用户信息。因此,必须在每次请求的开始对用户验证并授权,而验证和授权是互相协作的。如果用户请求一个只允许特定用户或特定角色的用户访问的安全页面,其处理流程如图1所示。

图1 网页的请求验证和授权过程

1.2 ASP.NET安全架构

ASP.NET通过HTTP模块实现安全守卫的概念。该模块是实现了IHttpModule的类,从图2可以看到,ASP.NET包括几个主要的验证和授权模块,每个模块都充当ASP.NET框架的守卫。ASP.NET通过触发全局应用程序类(定义在Global.asax文件中)来处理验证和授权。验证模块可以处理全局应用程序类中的事件执行自己的验证,相关事件由图2中所示的已配置的HTTP模块来处理。图3显示了与安全相关的应用程序事件发生的顺序。

图2 ASP.NET安全守卫 (IHttpModule类)

图3 与安全相关的应用程序事件

其中要处理的主要事件是AuthenticateRequest和AuthorizeRequest。AuthenticateRequest事件在请求需要验证时由HttpApplication引发。当用户验证通过后,就是需要确保用户标识信息可以在剩余的页面生命周期中可用。为此,必须创建一个带有用户信息的新对象并把它赋给当前运行中的HttpContext的User属性。当用户在AuthenticateRe quest事件中通过验证后会引发AuthorizeRequest事件。Authorization模块使用AuthorizeRequest检查用户是否被授权访问请求的资源。

1.2.1 ASP.NET 验证

在 web.config 配置文件的〈authentication〉节中选择要使用的验证模块。ASP.NET提供了三个主要的验证模块:FormsAuthenticationMoudle(表单验证,它允许设计自己的登录页面、编写自己的验证逻辑,依赖ASP.NET通过使用加密的cookie来追踪用户和角色信息)、WindowsAuthencationMod ule(和IIS一起实现Windows验证)、PassportA uthenticationMoudle(提供对微软Passport验证服务的封装,目前已被Live ID所取代)。

所有验证模块都实现IHttpModule接口,它提供对应用程序事件的访问。这样能够处理HttpApplication.AuthenticateRequest事件。每个模块还暴露了各自的验证事件,可以在Global.asax中处理它们。

1.2.2 ASP.NET 授权

用户经过验证后,ASP.NET框架自动使用户名之类的信息以及安全上下文可用。可以通过HttpContext.Current.User 对象访问这些信息并使用这些信息实现授权。ASP.NET引入了授权的内置模块:UrlAuthorization(根据Web应用程序各个文件夹的 web.config文件的〈authorization〉节配置的内容进行工作。它可以根据用户或用户被赋予的角色来限制对文件夹以及文件的访问) 和FileAuthorization(在局域网内部使用Windows验证时,ASP.NET自动使用FileAuthorization模块根据Windows ACL验证ASP.NET访问的文件是否有权限。因此,所有Windows用户必须至少对Web应用程序使用的文件具有读取的权限。该模块仅和Windows验证一起使用)。

此外,还可以在页面或Web应用程序使用的组件中编写自定义代码来实现授权。此时,根据用户提供的 HttpContext.Current.User对象或直接使用用户名来确定用户角色。

1.2.3 安全上下文

无论使用哪种验证系统,ASP.NET使用相同的底层模型表示用户和角色信息。根据用户提供的凭证,登录到Web应用程序的用户被授予一个主体(principal) 和一个标识(identity)。主体对象代表用户的当前安全上下文,它由用户自身 (标识)以及为当前用户保存的信息 (如角色、权限)等组成。因此,ASP.NET是通过主体对象来完成基于角色的授权的,并提供相应标识对象的引用。标识对象代表被成功验证的用户,它提供用户信息(如用户名),ASP.NET是通过标识对象来完成验证的。所有主体对象都必须实现IPrincipal接口,所有标识对象都必须实现IIdentity接口。

IPrincipal接口:它只定义了一个Identity属性,用于获取一个IIdentity对象,以便提供当前用户的信息。IPrincipal接口还定义了一个IsInRole()方法,它检查当前用户是否拥有某个特定的角色。访问当前Web页面或者当前HTTP上下文(HttpContext.Current) 的 User属性时,就是在访问代表当前用户安全上下文的IPrincipal对象。以下代码用于检查当前用户是否具有“Admin”角色:

IIdentity接口:它定义了表示当前用户的基本信息,至少包含以下三个只读属性:AuthenticationType,以返回字符串形式的验证类型;IsAuthenticated,以返回的布尔值表明用户已经经过验证或者是匿名用户;Name,用字符串返回当前用户名。以下代码用于检查用户是否经过验证:

1.2.4 成员资格和角色 API

为方便实现ASP.NET安全模型,ASP.NET的安全架构提供了一个通过编程和内置的管理工具来管理用户和角色。具体做法是通过成员资格和角色API来访问。重要的是该安全架构可以通过Provider设计模型进行扩展。

成员资格API:是完整的用户管理系统,提供用户的创建、编辑和删除,还包括密码恢复功能。在实践中可以使用API编程实现用户管理任务,也可以使用ASP.NET Web配置工具在图形界面下管理用户。

角色API:为用户赋予所需要的角色。和用户管理一样,也可以通过两种方式完成角色管理。

用户配置API:它在对站点的不同访问之间持久化每个用户的设置,用于在应用程序中管理用户档案。

扩展成员资格、角色和用户配置:它是负责数据存储中保存用户、角色和个人配置信息的组件。默认情况下,ASP.NET有关成员资格、角色和用户配置的信息保存在SQL Server数据库中,但也可以通过创建自定义的提供程序把这些信息保存到开发者所希望的地方。

2 安全编程原则

掌握ASP.NET安全的架构后,还必须在ASP.NET Web应用程序开发中编写安全的代码,具体应贯彻以下原则:

1)绝不要相信用户的输入。因此对用户的输入信息总要进行强验证。

2)绝不要使用字符串连接符来创建SQL语句。应该使用参数化的语句来确保程序不会被SQL注入攻击。

3)绝不要将没有经过验证和编码的用户输入直接显示在网页上。这有可能导致跨站点脚本攻击。正确的做法是使用HttpUtility.HtmlEncode()来转义特殊字符。

4)绝不要将敏感数据、关键业务数据以及影响企业内部决策的数据以隐藏字段的形式存储在网页上面。因为只要查看网页的源代码、修改并保存到本地文件中就可以修改隐藏字段。

5)绝不要将敏感数据、关键业务数据存储在视图状态中。视图状态只是页面上的一个隐藏区域,可以轻易地被解码并查看。

6)使用基本验证或者ASP.NET的表单验证时启用SSL。如果Web应用程序需要处理敏感数据,就应该使用SSL来保障网站的安全,保护不由应用程序直接管理的图片目录或存放其他文件的目录。

7)保护cookie。当使用表单验证时,一定要保护用于验证的cookie,并且尽可能地将超时时间设短,只在必要时将其设长。

3 结语

本文分析了ASP.NET安全模型,其安全框架包括了用户验证和用户授权的类,同时也提供了在应用程序中处理已验证了的用户的类。此外,.NET Framework本身也提供了一系列基类,用来保证在加密和数字签名过程中数据的机密性和完整性。为此,在基于ASP.NET Web应用程序中可以实现运用用户验证、授权或禁止对敏感资源的访问及保护服务存储的数据和网络上传输的数据等安全机制。最后在文中提出了将安全性融合到应用程序的架构和设计中的安全编程原则。

[1]郝刚.ASP.NET 2.0开发指南 [M].北京:人民邮电出版社,2006.

[2]Juval lowy.NET组件程序设计[M].刘如鸿,译.北京:电子工业出版社,2007.

[3]Cristian Darie,Karli Watson.ASP.NET 2.0 电子商务开发实战[M].施游,等,译.北京:人民邮电出版社,2007.

[4]微软公司.ASP.NET 3.5应用开发[M].北京:人民邮电出版社,2010.

Research on ASP.NET security model

WANG Shu-meng,ZHANG Shuo
(Yangzhou Polytechnic College,Yangzhou,Jiangsu,China 225009)

Safety of the web application is an important part of the program.By analyzing the ASP.NET security model,this paper puts forward some safety programming principles based on ASP.NET web application security,enabling developers to make the Web application safer.

ASP.NET security model;authentication;authorization;context;safety programming principles

10.3969/j.issn.1671-9581.2012.03.010】

TP393.08

A

1671-9581(2012)03-0042-04

2012-06-02

汪澍萌(1978-),男, 江苏扬州人,扬州市职业大学讲师,研究方向:计算机网络、现代教育技术。

猜你喜欢

应用程序编程架构
基于FPGA的RNN硬件加速架构
编程,是一种态度
功能架构在电子电气架构开发中的应用和实践
元征X-431实测:奔驰发动机编程
编程小能手
纺织机上诞生的编程
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
WebGIS架构下的地理信息系统构建研究
一种基于FPGA+ARM架构的μPMU实现