基于ASP.NET的Web应用程序安全性的探讨
扫描二维码
随时随地手机看文章
目前,虽然网站的绝大部分资源对浏览者是开放的.但是有些信息则是特别针对某些用户的,例如政府网、企业内部网等,只有特定的用户才能访问。需要使用严密的安全机制来保护,以确定用户访问资源的权限。Web安全性便是为限制只有特定用户群才能访问某些文件而设计。
正确识别用户身份,严密控制用户对资源的访问,是Web应用程序安全性中最重要问题,也是最基本的一环。实现安全操作,必须经过验证、授权和模拟等处理程序完成。
2 口令验证
Web安全处理的第一步便是验证,即对于请求信息的用户验证其身份。用户使用证件表明其身份.最常用的就是用户名和密码。在验证用户身份时,若系统不能根据用户的证件确定其身份,则身份验证失败,用户将被拒绝访问;若证件有效,则允许用户进入系统,并被赋予一个合法的已知身份。
口令验证是根据用户知道什么进行验证的一个例子,是目前最广泛的身份验证方法,虽然其安全性比其他几种方法差,但简单易行,如果使用恰当,可以提供一定程度的安全保证。防止口令泄漏是这一方法中的关键问题。
口令一般是由字母、数字和特殊字符等组成的字符串,其选择原则:①用户容易记忆;②难于被别人猜中或发现;③抗分析能力强;④限制使用期限,可经常更换。
目前主要有2种口令生成方法:①由用户自己选择口令。②由系统自动生成随机的口令。前者优点是用户很容易记住它,一般不会忘记.因为所选的口令往往与用户的某些特征有关,如生日、配偶名、电话号码等,正因为这样,口令很容易被猜出来,泄漏的机会较大。较好的方法是设计一个口令生成器,随机地为用户生成口令。这种方法带来的困难是用户记忆非常困难,即使这个字符串不长,要让一个人记住它也不是一件容易的事。口令的管理很麻烦,用户的口令要严格保密,不能被其他用户得到。口令更不能以明文的形式存放在系统中,这样口令很容易泄漏。因此,必须使用数据加密的方法将口令以密文的形式存放在系统中。
ASP.NET提供了3种验证用户的模式,每一种验证模式都是通过一个独立的验证程序实现。3种验证模式分别为Windows、Forms和Passport。Windows验证是通过I2S实现:Forms验证是在开发人员自己的服务器上实现:而Passport验证则是通过微软公司的订阅服务实现。
2.1 Windows验证
当用户请求ASP.NET页面时,请求信息首先遇到的是Web服务中的Internet信息服务。Internet信息服务首先验证用户身份,或者将验证工作交给ASP.NET应用程序。这种Windows身份验证过程如图l所示。
2.1. l 基本身份验证
除了根本不进行验证外,基本身份验证是一种最简单的验证方式,也是一种收集用户证件的行业标准方法。
基本身份验证的步骤:①客户向服务器请求被限制的资源;②Web服务器以“401 unauthoried”进行响应;③客户端浏览器接收到这条信息后,要求用户输入用户名和密码来进行验证;④如果验证失败,用户证件无效,则会返回“2”,重新以“401 Unauthoried”响应;⑤如果验证成功,客户浏览器便通过身份验证,可以访问请求资源。
2.1.2 Windows域服务器的摘要式验证
摘要式身份验证,提供了与基本身份验证同一样的功能,在通过网络往服务器传送用户证件信息时提高了安全性。摘要式验证会使用MD5哈希算法加密来处理用户证件资料。由于此项处理是单向,就算有人从网络上将它们截取下来,也无法解译成原来的用户名与密码,从而保证服务器资源的安全性。
2.1.3 集成Windows身份验证
集成Windows身份验证时,将不会要求用户输入证件。相反,当浏览器连接到服务器后,即将加密后的、用户登录计算机时使用的信息发送给服务器。服务器检查这些信息,以确定用户是否有权访问。
2.2 窗体验证
窗体验证,即验证用户证件资料。在ASP.NET中,可以选择由ASP.NET应用程序通过窗体验证进行身份验证,而不是通过I2S。窗体验证是ASP.NET验证服务,它能够让应用程序拥有自己的登录界面。当用户试图访问被限制的资源时,便会被重定向至登录界面,而不是弹出登录对话框。在登录页面中,可以自行编写代码验证用户的证件资料。
安全处理流程如图2所示。
在登录界面中提交按钮的Click事件处理程序中,可检查用户输入的证件资料,从而判断证书资料是否正确,也就是身份验证的过程。根据证件资料不同的存放位置,可以将验证方式划分为以下3种。
(1)在代码中直接验证设计人员可以直接在代码中将用户输入的证件资料一一对比,从而判断用户证件资料是否正确。
(2)利用数据库实现验证在代码中直接对比用户的证件资料,不仅麻烦而且代码也难以维护。当用户很多时,验证会显得十分麻烦。这时,可将用户列表信息先存储在数据库里,然后在login_btn_Click()方法中编写代码从数据库取出用户资料,再逐一对比,如果有相符者,则通过验证。
(3)利用配置文件实现验证在配置文件中,使用<forms>子元素的<credentials>项定义用户名和密码,即将正确的用户证件资料存储在配置文件中。当用户登录时单击“登录”按钮,可以在其Click事件处理程序中调用FormsAuthentication,Authenticate()方法,系统便会自动地将用户所输入的信息与<credentials>项中的用户名与密码相比较,如果相符,则可通过验证。
2.3 Passoort验证
Passport验证是微软公司提供的一种验证服务,其工作原理与窗体验证类似,只是无需创建任何自定义的功能。这两种方法都是在客户端创建Cookie,用于授权。使用Passport验证时,用户将被重定向至Passport登录网页,该页面提供了一个非常简单的窗体让用户填写用户验证资料,窗体将通过Passport服务来检查用户的证件,以确定用户的身份是否有效。如果用户证件通过了验证,则为它在客户端计算机上建立一个验证Cookie。
建立Passport验证的关键一步是正确地设置Web.config文件,使用代码如下所示:
3 授权
用户通过验证,并且取得自己的身份后,就必须检查其是否拥有访问所请求资源的权限,此过程便称为“授权”。例如,在机密的政府机构中,如果有人想进入某些房间,则首先必须检查其是否拥有进入该房间的权限。
在Windows系统中,大部分的文件都会拥有一个访问控制列表。不仅会列出有哪些用户或者用户组访问该资源,而且详细地指出了每个用户或者用户组所能够运行的访问类型一能否读取、写入、修改和删除等。
《图片管理系统》中的权限声明:12级的用户指超级管理员,即可以执行所有操作;11级的用户拥有修改图片权限:10级的用户只有浏览图片的权限。
在ASP.NET中,授权方式主要有2种,它可以依赖Windows指出通过验证的用户可访问哪些资源,称之为文件授权;也可依赖被请求资源的URL,被称为URL授权。下面的这段代码可实现对多个目录的权限控制:
URL授权由UrlAuthorizationModule HTTP模块控制,该模块的行为由存储于web.config文件的<authorization>中的设置驱动。在URL授权的最后阶段,需要指出的是,只有ASP.NET资源受到监控。通常,基于URL的授权很少与Windows身份验证一起使用,URL授权对于Forms身份验证则更有效。
4 模拟
ASP.NET的另一项重要安全功能便是用户账户模拟。默认状态下,ASP.NET不启用模拟,而是执行所有的代码,应用程序可访问所有的文件与文件夹,这时必须采用其他的安全措施控制访问权限。
图3详细说明了用户为获得安全资源的访问权限需要经历的过程。
使用模拟功能,ASP.NET能够以访问应用程序的用户身份来执行页面。即若用户以“Winters”身份来访问资源,则ASP.NET将把自己模拟成“Winters”来使用服务器上的各项资源,并根据该用户的权限限制或者允许ASP.NET访问某些资源,从而实现数据的安全性。模拟用户的流程图如图4所示。
ASP.NET应用程序是系统资源的用户,需要访问文件、内存等,因此在默认状态下,ASP.NET应用程序进程有非常大的权限,几乎可访问系统提供的任何资源。但有时可能根据需要通过使用ASP.NET应用程序的用户身份来限制对资源的使用,这便要运用模拟功能,让ASP.NET模拟用户身份运行程序。
5 结语
综上所述,是通过开发《图片管理系统》中对ASP.NET安全性的探讨。文章中的例子包括程序代码段都是在开发过程中应用的、经过验证的、也是运行通过的。有关于ASP.NET安全性问题有待于继续探讨。