ASP.NET数据验证技术研究详解
引 言
随着ASP.NET技术为代表的新的Web技术的发展,Web在各行各业得到广泛的应用,其功能越来越复杂,也越来越强大。Web开发中的一个很重要的问题就是,如何设计安全有效的Web程序,可以保护存储的重要信息,以降低其受攻击的危险。
数据验证是验证用户标识真实性的过程,用以鉴别用户身份是否合法。ASP.NET中,在编写Web应用程序时,用户保存或者处理信息,就需要判断其有效性和安全性。由于Web应用程序是基于请求/响应模式的,所以Web的数据验证有多种方式。可以在服务器端直接对数据进行验证,也可以编写客户端脚本来实现数据有效性的验证,当这些数据提交给服务器时就经过了验证。在实际的项目开发中,既需要客户端验证,也需要服务器验证。
2 几种常用的ASP.NET数据验证技术
2.1 基于图片和附加码的ASP.NET数据验证
目前实现图片验证码时有两种方式:
(1)通过动态数据网页中的各种脚本来实现。
(2)用支持动态数据网页的第二方组件来实现。
组件的应用会提高效率,比较容易实现,在ASP.NET中编写基本的脚本,赋予其必要的属性,例如生成码颜色,码位数,码尺寸等,就可以灵活地生成一组验证码。验证码图片一般放在用户名和用户密码的后边即可,也可以根据需要放置。附加码通常由服务器随机产生,一般是由数字和字母组成的一串字符,显示在登陆页面中,用户登录时必须将附加码一并输入提交,服务器对提交的验证码同时进行验证。
2.2 Web表单ASP.NET数据验证
在ASP.NET中,被指定为runat=“server”的表单被称为Web表单,Web表单本身是基于服务器的,是ASP.NET用来为应用程序提供大部分功能框架的一部分,服务器对界面的情况一清二楚,也就是说用户元素只能在服务器上创建。当用户输人完数据提交表单时,服务器将通过另外的页面来验证Web表单中所输入数据是否有效。表单在实现验征方面具有灵活性和易于实现性,其数据验证功能比较强大,开发人员既可以把用户信息放在Web.config文件中,也可以将用户的验证信息放在数据库或XML文件中,通过创建自己定义的程序来验证数据。
2.3 Web窗体ASP.NET数据验证
ASP.NET框架还提供了一种新型的数据验证,他将使用Web服务器控件来实现数据的验证,称其为Web窗体数据验证技术。因此,把专门用于Web数据验证的Web服务器控件称为Web数据验证控件。ASP.NET中有6种数据验证控件,这里着重介绍灵活强大CustomVal-idator控件,假设现在建立一个与数学有关的网站,在这个网站,要求浏览者提供自己喜欢的质数,以此来提高网站的访问量。在ASP.NET中,没有一个专门验证质数的服务器端数据验证控件,这样,就有必要用到CustomValida-tor控件。以下例子用来验证用户输入的数是不是质数:
2.4 使用客户端脚本实现ASP.NET服务器控件的ASP.NET数据验证
为了减少数据验证时浏览器和服务器之间的往返时间,可采用客户端脚本来实现其功能,在浏览器中使用的脚本有很多,如VBScript,JSCript,JavaScript等,但是这样存在安全隐患,因为用户可以任意修改客户端脚本以跳过客户端的验证,还有些浏览器是不支持客户端脚本的,这样的数据验证就必须在服务器端进行。
2.5 使用正则表达式进行ASP.NET数据验证
正则表达式(Regular Expression)是由普通字符(称为原义字符)和特殊字符(称为元字符)组成的字符串,用来定义字符处理时需要匹配的内容模式。也就是说,正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与Web页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,以执行相应的处理操作。对于处理字符串的许多应用程序而言,正则表达式是不可缺少的模式描述工具。
例:定义一个匹配我国居民身份证号码格式的正则表达式。分析:我国居民身份证号码规定的合法格式为15位或18位数字。根据语法规定,对应的正则表达式应写为:“\d{15}| \d{18}”。
3 对象成员ASP.NET数据验证组件实现
以上的数据验证技术在数据验证方面起着重要的作用,有着各自不同的特点.他们都是经过UI逻辑的数据验证,经过UI逻辑验证数据后,通过开发对象成员数据验证组件来进行下一步的业务逻辑的验证,可以较大程度上提高数据的安全性。
大多数情况下,在UI经过验证的数据就交给业务逻辑进行处理,而业务逻辑往往不会对数据再进行验证操作。业务逻辑认为数据来源于UI,在UI验证数据就已经够安全,如果在业务逻辑再进行一次验证有点多此一举。而业务逻辑本身就是一个独立体,把数据的合法性依赖于UI是不应该的,不合理的。但在业务逻辑中对成员的数据验证并不像UI那样有着方便的验证控件,如果手动对每个数据成员进行编码验证的确会增加很大的工作量。为了解决这方面问题,将通过Custom Attribute的方式来简化对象成员数据验证的功能;为了简化验证代码的编写,将通过Attribute来配置对象成员需要验证的方式,然后通过容器进行统一验证。
为了规定一个统一的验证规则,制定一个验汪对象基础类:
当定义了验证的方式后就可以通过组件的容器对类的实例进行数据验证。
把需要验证的类型添加到容器中,通过容器的Vialid 方法对实例进行验证。
4 ASP.NET数据验证结语