提升ASP.Net应用程序安全性能的策略

2012-01-11 03:41范振钧丛云飞
通化师范学院学报 2012年4期
关键词:窗体身份验证控件

范振钧,丛云飞

(通化师范学院 计算机科学系,吉林 通化 134002)

1 引言

ASP.Net是未来Web应用开发的趋势,安全性是ASP.Net Web应用程序中一个非常重要的方面.基于ASP.Net Web应用程序的安全性分为以下两个层次的内容:①在.Net平台级安全性架构的设计,主要探讨在.Net平台的支持下,采用何种安全策略对用户进行身份验证和授权.②应用程序级的安全性设计,主要研究如何减少常见的安全威胁,防止黑客入侵的措施.

2 在.Net平台级安全性架构的设计

2.1 ASP.Net安全性实现基础

ASP.Net与Microsoft Internet信息服务(IIS)协同工作[1],它们一起为Web应用程序安全提供了一个基础结构,ASP.Net安全结构图如图1所示.

图1 ASP.Net安全结构图

Web客户端通过Microsoft Internet信息服务(IIS)与ASP.Net应用程序通信.IIS根据需要对请求进行身份验证,然后找到请求的资源.如果客户端已被授权,则资源可用..Net安全架构提供了3个关键的安全过程:身份验证、授权、模拟,是Web应用程序安全性实现的基础[2].

(1)身份验证(Authentication).身份验证过程接受用户凭据,并根据指定的颁发机构来验证凭据.客户端必须提供凭据,以便服务器验证访问者的标识.确认标识后,应用程序就能授权访问者访问系统资源.

(2)授权(Authorization).授权过程确定已证实的标识是否可以访问某一特定资源.有两种基本方式来授予对给定资源的访问权限:文件授权和URL授权.文件授权是根据访问控制列表(ACL)或资源权限进行检查,以确认已经过验证的用户能否访问资源.URL授权是根据URL来进行授权,对Web空间上的标识来授权.

(3)模拟(Impersonation).模拟机制允许服务器进程使用客户端的安全凭据来运行.当服务器模拟客户端时,服务器的所有操作均使用客户端的凭据进行.不论IIS是否通过验证,如果启用了模拟,则ASP.Net应用程序会模拟所收到的任何标记[3].为了实现模拟需要将程序文件所在磁盘的文件格式转化为NTFS格式,便于应用程序安全设置.

2.2 ASP.Net实现应用程序安全性的两种基本策略

在上述安全性工作基础的保障下,ASP.Net给应用程序提供了多种安全工作策略,两种常用的安全性工作策略是:①使用Windows身份验证、不允许匿名访问并启用模拟;②使用窗体身份验证、不允许匿名访问并禁用模拟.

(1)使用Windows身份验证、不允许匿名访问并启用模拟.使用Windows身份验证、不允许匿名访问并启用模拟方案依赖于IIS身份验证和Window Nt文件安全性,可以最大限度地减少ASP.Net应用程序本身的安全性编程量[4].

一般来说,有两种情况适合使用于ASP.Net中采用Windows验证模式.第一种是Intrant站点(亦即公司内部站点);第二种情况是事先知道有哪些用户会访问您的站点.应用程序必须为每一个用户创建一个Windows账户,并设置用户名称与密码以便在访问网站中作为登录证书.如果用户数量很多建议使用组.注意登录用户必须拥有ASP.Net应用程序所在目录的NTFS访问权限,才能访问ASP.Net应用程序.

(2)使用窗体身份验证,不允许匿名访问并禁用模拟.基于窗体的身份验证可以定制登录页面及登录准则,可以将未授权的用户重定向到程序指定的登录页面.这种身份验证方案是互联网上许多Web应用程序进行身份验证的固定模式.使用窗体身份验证,登录用户信息已经提前保存在数据库中.它的主要思想是将网站的网页分为两类:一类是常规性的网页,允许匿名访问.对此类网页的访问请求ASP.Net不做限制,只要用户的ip地址与域名称被IIS认可,可以随时接受访问;另一类是含有重要的保密信息的网页,对这类网页的访问,必须由ASP.Net进行验证.验证的过程如下:当ASP.Net接手从IIS移交过来的请求后,首要的工作就是检查该请求的标头中是否含有一份验证Cookie(验证票).如果没有,表示该位用户没有通过验证.此时便会将请求重定向至登录网页,让用户输入正确的证书资料.用户在登录页上提交正确的用户凭据(用户账号和密码)后,窗体验证的处理机制会产生一份内含证书或密码的验证Cookie(亦即验证票),并将验证的Cookie加至该请求的标头中,然后重定向到用户原始请求的页上.当用户在同一会话中再次请求该页时,请求头中将包含身份验证表单以便再次验证和授权.

2.3 窗体身份验证实现例子

可以由4种方法实现窗体身份验证.①在代码中直接验证用户.②利用web.config实现验证.③利用数据库实现验证.④利用证书(xml)文件实现验证.本文只探讨②方案的实现方法.

(1)主要思想:在数据库中添加一个用户表,含有userName,passWord字段,注意将passWord字段使用MD5或SHAI算法加密.在程序中对登录页面提供的账号密码信息,同数据库中用户的帐号和密码信息进行比较,如相符则验证成功,否则重定向到登录页面中[5].

(2)实现的主要步骤及使用的.Net关键对象.①通过sqlConnection、SqldataReader等对象实现数据库数据读取操作.②调用FormsAuthentication对象的HashPasswordForStoringInConfigFile方法,对用户输入的密码进行加密.③判断用户密码是否存于数据库中,如果存在,创建存储用户证件资料的Cookie,并跳转到受保护的页面中,否则重定向到登录页面.

3 在应用程序设计层面上提高安全性的几项措施

上述两种安全方案充分地利用了.Net框架和IIS的功能,可以很好地保证程序的安全性.但是上述两种方案都是明码传送,对黑客攻击所带来的安全隐患考虑不够,所以在程序设计层面上还应该采取进一步的措施,预防各种黑客的攻击,才能实现真正的安全.

(1)使用安全的验证控件,预防脚步注入.借助于验证控件,我们可以在网页加入输入检验功能.验证控件提供一种简单的机制来进行所有通用类型的标准验证,验证控件允许设计者自行决定要如何显示错误信息.在用ASP.Net进行窗体页面设计的时候,通过使用RegularExpressionValidator、RequiredFieldValidator、RangeValidator、CompareValidator等验证控件对访问者的输入信息进行限制,有效的屏蔽JavaScript脚本字符,预防脚本注入.

(2)定期更新Cookie,防治盗用Cookie.当应用程序采用窗体身份验证方案进行验证时,一般情况下,大都使用Cookie来维护用户在各个请求之间的标识,而通过网络监视程序“盗用”用户Cookie是网络黑客入侵应用程序的常用手段.因此,设计者可以采用使服务器定期更新Cookie方法,来防止其他用户盗用Cookie访问站点,在一定程度上保护网站不被侵入.

(3)使用存储过程,避免SQL注入式攻击.要避免SQL注入攻击首先需要通过,RegularExpressionValidator验证控件对用户输入进行验证.然后,在验证的基础上编写标准的存储过程,并使输入参数与相应的列具有相应的尺寸,这样黑客就无法把大量数据或大的文本块送到存储过程中.通过执行存储过程实现对数据表的操作,避免了对数据表的直接访问,实现了用户和数据的隔离,减少应用程序泄密的危险,保证了数据的安全.

4 结束语

安全性是ASP.Net Web应用程序设计中一个非常重要的方面.详细明白Web应用程序中安全性原理,减少常见的安全威胁、保护Web应用程序中的资源以及对用户进行身份验证和授权的信息,对程序员进行软件开发有重要的理论价值和现实意义.

参考文献:

[1]曲卫华.ASP.NET安全性浅析[J].太原大学学报,2009,10(3).

[2]李伟.基于ASP.NET应用程序的安全性设计和实现[J].科技情报开发与经济,2008,18(5).

[3]苏玉召,赵妍.基于ASP.Net安全模型的用户模拟的设计与实现[J].计算机信息与技术,2006(4).

[4]桂学勤,余英宏.ASP.Net安全性工作方案和窗体身份验证的实现[J].微计算机应用,2005(1).

[5]章立民.用实例学ASP.Net[M].武汉:华中科技大学出版社,2006.

猜你喜欢
窗体身份验证控件
基于.net的用户定义验证控件的应用分析
试谈Access 2007数据库在林业档案管理中的应用
基于Qt的多窗体快速并行图形绘制方法研究
关于.net控件数组的探讨
人脸识别身份验证系统在养老保险生存核查中的应用
Endogenous neurotrophin-3 promotes neuronal sprouting from dorsal root ganglia
HID Global推动多层身份验证解决方案
基于嵌入式MINIGUI控件子类化技术的深入研究与应用
WinCE.net下图形用户界面的开发
Spreadsheet控件在Delphi数据库系统中的编程与应用