ASP.NET安全性问题的探究

描述

1 引言

Web应用程序是当今多数企业应用的前沿阵地。Web应用程序在一个复杂的混合性架构中可以发挥多种不同的功能。其涉及范围极广,从在最新的云技术上运行的面向服务的方案,到较老的多层Web应用程序,再到准许客户访问大型主机上老应用程序的Web入口,都有其应用。管理与这些复杂的Web应用程序相关的风险是公司的必然要求,而且运行这些Web应用程序的底层代码的安全性直接影响到公司应用程序可用数据的风险态势。不幸的是,开发可重复的高效Web应用程序的安全实践并非一项简单任务。许多单位试图运用后生产(poST-production)解决方案来提供安全控制,如Web应用防火墙和入侵防御系统等。

2 口令验证

Web安全处理的第一步便是验证,即对于请求信息的用户验证其身份。用户使用证件表明其身份。最常用的就是用户名和密码。在验证用户身份时,若系统不能根据用户的证件确定其身份,则身份验证失败,用户将被拒绝访问;若证件有效,则允许用户进入系统,并被赋予一个合法的已知身份。

口令验证是根据用户知道什么进行验证的一个例子,是目前最广泛的身份验证方法,虽然其安全性比其他几种方法差,但简单易行,如果使用恰当,可以提供一定程度的安全保证。防止口令泄漏是这一方法中的关键问题。

口令一般是由字母、数字和特殊字符等组成的字符串,其选择原则:①用户容易记忆;②难于被别人猜中或发现;③抗分析能力强;④限制使用期限,可经常更换。

目前主要有2种口令生成方法:①由用户自己选择口令。②由系统自动生成随机的口令。前者优点是用户很容易记住它,一般不会忘记。因为所选的口令往往与用户的某些特征有关,如生日、配偶名、电话号码等,正因为这样,口令很容易被猜出来,泄漏的机会较大。较好的方法是设计一个口令生成器,随机地为用户生成口令。这种方法带来的困难是用户记忆非常困难,即使这个字符串不长,要让一个人记住它也不是一件容易的事。口令的管理很麻烦,用户的口令要严格保密,不能被其他用户得到。口令更不能以明文的形式存放在系统中,这样口令很容易泄漏。因此,必须使用数据加密的方法将口令以密文的形式存放在系统中。

ASP.NET 的事件模型是由以及数个 Hidden Field 组合而成,基于 HTTP 模型的限制,所有的网页程序在运行结果输出到用户端后,程序就会退出运行,为了维护在 ASP.NET 网页与控件的状态数据,因此在输出 ASP.NET 控件时,ASP.NET 会将部份状态数据储存到网页的 Hidden Field 中,这类型的状态数据称为 ViewState(ID 为 __VIEWSTATE),在服务器端即会被解译出状态与事件数据。3种验证模式分别为Windows、Forms和Passport.Windows验证是通过I2S实现:Forms验证是在开发人员自己的服务器上实现:而Passport验证则是通过微软公司的订阅服务实现。

2.1 Windows验证

ASP是一项微软公司的技术,是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术。指ActiveServerPages(动态服务器页面),运行于IIS之中的程序。ASP.net构架是可以用Microsoft(R)公司最新的产品VisualStudio.net开发环境进行开发,WYSIWYG(WhatYouSeeIsWhatYouGet所见即为所得)的编辑。这些仅是ASP.net强大化软件支持的一小部分。

当用户请求ASP.NET页面时,请求信息首先遇到的是Web服务中的Internet信息服务。Internet信息服务首先验证用户身份,或者将验证工作交给ASP.NET应用程序。这种Windows身份验证过程如图l所示。

WINDOWS

2.1. l 基本身份验证

除了根本不进行验证外,基本身份验证是一种最简单的验证方式,也是一种收集用户证件的行业标准方法。

基本身份验证的步骤:①客户向服务器请求被限制的资源;②Web服务器以"401 unauthoried"进行响应;③客户端浏览器接收到这条信息后,要求用户输入用户名和密码来进行验证;④如果验证失败,用户证件无效,则会返回"2",重新以"401 Unauthoried"响应;⑤如果验证成功,客户浏览器便通过身份验证,可以访问请求资源。

2.1.2 Windows域服务器的摘要式验证

域名服务器的全称是Domain Name Server,一种程序,它保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。

摘要式身份验证,提供了与基本身份验证同一样的功能,在通过网络往服务器传送用户证件信息时提高了安全性。摘要式验证会使用MD5哈希算法加密来处理用户证件资料。由于此项处理是单向,就算有人从网络上将它们截取下来,也无法解译成原来的用户名与密码,从而保证服务器资源的安全性。

2.1.3 集成Windows身份验证

Windows标志windows中文是窗户的意思。另外还有微软公司推出的视窗电脑操作系统名为windows.随着电脑硬件和软件系统的不断升级,微软的windows操作系统也在不断升级,从16位、32位到64位操作系统。从最初的windows1.0到大家熟知的windows95、NT、97、98、2000、Me、XP、Server、Vista,Windows 7各种版本的持续更新,微软一直在尽力于Windows操作的开发和完善。

集成Windows身份验证时,将不会要求用户输入证件。相反,当浏览器连接到服务器后,即将加密后的、用户登录计算机时使用的信息发送给服务器。服务器检查这些信息,以确定用户是否有权访问。

2.2 窗体验证

窗体验证,即验证用户证件资料。在ASP.NET中,可以选择由ASP.NET应用程序通过窗体验证进行身份验证,而不是通过I2S.窗体验证是ASP.NET验证服务,它能够让应用程序拥有自己的登录界面。当用户试图访问被限制的资源时,便会被重定向至登录界面,而不是弹出登录对话框。在登录页面中,可以自行编写代码验证用户的证件资料。

安全处理流程如图2所示。 

WINDOWS

在登录界面中提交按钮的Click事件处理程序中,可检查用户输入的证件资料,从而判断证书资料是否正确,也就是身份验证的过程。根据证件资料不同的存放位置,可以将验证方式划分为以下3种。

(1)在代码中直接验证设计人员可以直接在代码中将用户输入的证件资料一一对比,从而判断用户证件资料是否正确。

(2)利用数据库实现验证在代码中直接对比用户的证件资料,不仅麻烦而且代码也难以维护。当用户很多时,验证会显得十分麻烦。这时,可将用户列表信息先存储在数据库里,然后在login_btn_Click()方法中编写代码从数据库取出用户资料,再逐一对比,如果有相符者,则通过验证。

(3)利用配置文件实现验证在配置文件中,使用子元素的项定义用户名和密码,即将正确的用户证件资料存储在配置文件中。当用户登录时单击"登录"按钮,可以在其Click事件处理程序中调用FormsAuthentication,Authenticate()方法,系统便会自动地将用户所输入的信息与项中的用户名与密码相比较,如果相符,则可通过验证。

2.3 Passoort验证

Passport验证是微软公司提供的一种验证服务,其工作原理与窗体验证类似,只是无需创建任何自定义的功能。这两种方法都是在客户端创建Cookie,用于授权。使用Passport验证时,用户将被重定向至Passport登录网页,该页面提供了一个非常简单的窗体让用户填写用户验证资料,窗体将通过Passport服务来检查用户的证件,以确定用户的身份是否有效。如果用户证件通过了验证,则为它在客户端计算机上建立一个验证Cookie.

建立Passport验证的关键一步是正确地设置Web.config文件,使用代码如下所示:

WINDOWS

3 授权

用户通过验证,并且取得自己的身份后,就必须检查其是否拥有访问所请求资源的权限,此过程便称为"授权".例如,在机密的政府机构中,如果有人想进入某些房间,则首先必须检查其是否拥有进入该房间的权限。

在Windows系统中,大部分的文件都会拥有一个访问控制列表。不仅会列出有哪些用户或者用户组访问该资源,而且详细地指出了每个用户或者用户组所能够运行的访问类型一能否读取、写入、修改和删除等。

在ASP.NET中,授权方式主要有2种,它可以依赖Windows指出通过验证的用户可访问哪些资源,称之为文件授权;也可依赖被请求资源的URL,被称为URL授权。下面的这段代码可实现对多个目录的权限控制:

WINDOWS

URL授权由UrlAuthorizationModule HTTP模块控制,该模块的行为由存储于web.config文件的中的设置驱动。在URL授权的最后阶段,需要指出的是,只有ASP.NET资源受到监控。通常,基于URL的授权很少与Windows身份验证一起使用,URL授权对于Forms身份验证则更有效。

4 模拟

ASP.NET的另一项重要安全功能便是用户账户模拟。默认状态下,ASP.NET不启用模拟,而是执行所有的代码,应用程序可访问所有的文件与文件夹,这时必须采用其他的安全措施控制访问权限。

图3详细说明了用户为获得安全资源的访问权限需要经历的过程。

使用模拟功能,ASP.NET能够以访问应用程序的用户身份来执行页面。即若用户以"Winters"身份来访问资源,则ASP.NET将把自己模拟成"Winters"来使用服务器上的各项资源,并根据该用户的权限限制或者允许ASP.NET访问某些资源,从而实现数据的安全性。模拟用户的流程图如图4所示。

WINDOWS

ASP.NET应用程序是系统资源的用户,需要访问文件、内存等,因此在默认状态下,ASP.NET应用程序进程有非常大的权限,几乎可访问系统提供的任何资源。但有时可能根据需要通过使用ASP.NET应用程序的用户身份来限制对资源的使用,这便要运用模拟功能,让ASP.NET模拟用户身份运行程序。

5 结语

综上所述,是通过开发《图片管理系统》中对ASP.NET安全性的探讨。文章中的例子包括程序代码段都是在开发过程中应用的、经过验证的、也是运行通过的。有关于ASP.NET安全性问题有待于继续探讨。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分