NET验证机制在Web表单验证中的应用研究

时间:2022-09-07 06:25:24

NET验证机制在Web表单验证中的应用研究

摘要:随着信息技术快速发展信息产品日新月异,计算机应用在各行各业不断深入。随之产生庞大数据的有效性和安全性在网络应用系统中显得非常重要。为了使数据能够被合法访问并且不对数据产生破坏性,必须采取有效的防范措施。该文就是从用户角度去设计和理解用户的使用动机,选择有效的数据验证方式防止数据遭受毁灭性破坏。

关键词:Web;表单;验证机制

中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)34-1987-02

Application Research of the .NET Verify Rule in Web Form Verify

RAN Cong-lin

(Jiujiang University Information Technology Center, Jiujiang 332005, China)

Abstract: With the information technique quickly develops, the information products change with each passing day, computers are used widely in every field. So the usefulness and safety of data seem to be more and more important in the network application systems. Users can visit the data by legal rule, but the useful data are not destroyed by some effective measures. The paper is a typical way to select valid verifications by analyzing users’ motivation for keeping safety data from not being destroyed.

Key words:Web; form; verify rule

1 引言

对于WEB程序开发人员表单验证选择在客户端还是在服务器端验证是个非常麻烦的问题。如果进行客户端JavaScript验证,不仅难以做到美观统一,而且还可能通过直接在浏览器提交表单来屏蔽;如果进行服务器端验证,那么把检验结果显示在前台页面也非常麻烦。

在.NET中,这一问题的解决方法得到了改进,开发者可以更好的选择,更自动化地进行服务器端和客户端验证,或者同时进行两种验证。.NET提供了很多验证控件,使得开发人员不用特别考虑是进行客户端还是服务器端验证,也不用考虑如何显示输出结果。

2 .NET中Web表单验证控件的功能和特点及其应用。

1) .NET中的Web表单验证器及其功能。

① RequiredFieldValidator检查用户是否输入或选择了任何内容

② RegularExpressionValidator 根据规则表达式检查用户输入。该过程允许进行许多种类的检查,可以用于邮政编码和电话号码等的检查。

③ CompareValidator 将输入控件与一个固定值或另一个输入控件进行比较。例如,它可以用在口令验证字段中。也可以用来比较输入的日期和数字。

④ RangeValidator 与 CompareValidator 非常相似, 只是它用来检查输入是否在两个值或其它输入控件的值之间。

⑤ CustomValidator 允许用户编写自己的代码以加入到验证框架中。

2)验证控件是执行客户端验证、服务器端验证或这两种验证,具体取决于显示该页面的浏览器的功能。验证控件具有下列特点。

① 可以将一个或多个验证控件与要验证的各个控件相关联。

② 提交页面窗体时执行验证(页面数据合法性验证流程图如图1)。

③ 可用编程方式指定是否进行验证,比如提供一个取消按钮,以便用户无须在所有字段中都填充有效数据即可退出。

④ 验证控件自动检测应对客户端还是服务器端执行验证。

3 确保表单输入数据的安全灵活选择验证方式

在各种Web应用系统中Web表单是不可或缺的。在Web输入表单中通常为了避免攻击对重要数据的蓄意破坏或者保证用户输入信息的有效性,在系统中都应该对用户的输入进行检查和检验,然后再存入数据库中。那么,对Web表单数据有效性验证是在前台还是在后台进行呢?从以下几个方面分析。

1) 理解Web表单验证真正原因。在Web开发中进行数据有效性验证,通常有两方面原因:帮助用户输入有效数据和保证安全性。

① 就有效数据而言,需要保证用户输入是合理的或者真实的,这其中包括:用户输入了满足一定要求的用户名、密码和有效邮件地址等,或者包括要求用户输入了真实的姓名、身份证号码等。

② 就安全而言需要保证用户不是进行恶意攻击,并且确认用户输入信息本身的可信性。

因此无论从哪一方面来说,进行数据有效性验证都是必要的,而且可能引起问题的原因越多,需要进行的检验就越复杂。

2) 结合Web表单有效性验证侧重点灵活选择验证方式。

① 对于用户输入的有效性,如要求用户名不能采用非法字符,密码满足一定长度或者复杂性,邮件地址满足特定格式等这类检查要求,在用户输入提交之前就进行检查,完全可以借助.NET提供的大量验证控件在前台客户端验证。

② 从安全的角度考虑,即使用户输入数据满足有效性要求,通常还应该在服务器端后台进行进一步检查确认。例如针对SQL注入式攻击的情况,用户有可能绕过前台表单输入页面,直接提交数据请求,此时就有必要进行后台检验,以保证数据足够的有效性和安全性检查。相比而言,此次的检查甚至要比前台检查更进一步,并且更加复杂。

表单在前台验证还是在后台验证这并不等同于客户端验证还是服务器端验证的问题,前台或后台验证是系统功能的选择和设计原则问题,客户端验证或服务器端验证则是一个具体的技术实现方式的选择问题。因此对于表单数据有效性验证,笔者认为在.NET中比较妥善的方式是在前台和后台同时进行验证。

3) 以SQL Server数据库为例分析由Web表单产生“SQL注入式攻击”的应对策略。

在数据库网络应用系统中采用SQL Server数据库,容易产生一种常见的安全性错误,即SQL漏洞注入式错误,由此可能引发利用这种错误进行所谓的“SQL注入式攻击”。通过笔者多年在Web表单开发中遇到“SQL注入式攻击”问题简单并分析其应对策略。

SQL注入式攻击是攻击者把SQL命令插入到Web表单的输入域或者页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造或者影响动态SQL命令,或者为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。

常见的SQL注入式的基本过程有:

① 某个.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问该应用程序,它要求用户输入一个合法帐号和密码。

② 登录页面中输入的内容用来构造动态的SQL命令,或者直接用作存储过程的参数。

③ 攻击者在用户名字和密码框输入’’’或’1’=’1’之类的内容。

④ 用户输入的内容提交给服务器之后,服务器运行上面的.NET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:select * from user where login =’’ or ‘1’=’1’ and password = ‘’ or ‘1’=’1’。

⑤ 服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比。

⑥ 由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。

如果用户的帐号具有管理员或者其他比较高级的权限,攻击者就可能对数据库表执行各种想要做的操作,包括添加、删除或更新数据,甚至可能直接删除表。

4) 根据在Web应用系统中复杂的SQL注入式攻击的基本过程和原理,如何有效避免错误应对SQL注入式攻击,笔者认为要坚持下面三个基本原则。

① 对IIS的执行权限谨慎管理,除非特别必要,一般不要提供执行权限。

② 谨慎管理数据库用户的访问权限,通常public权限就足够了,sa级别权限不要提供。

③ Web开发程序代码中尽可能多地增加对客户提交数据的检测。

4 防范SQL注入漏洞的具体方法

根据以上原则和笔者在Web编程开发过程积累的经验提供以下防范SQL注入漏洞的具体方法:

1) 检测用户输入为空时立即重定向。

2) 强制检测用户提交信息路径,禁止从非指定页面提交数据。

3)对用户通过网址提交的变量进行检查。例如,一旦发现客户提交的参数中有insert、select、delete、from等关键字符时要立即对其进行过滤操作转向出错页面或者给出警告信息。

4) 对所有页面错误,统一给出一种错误提示信息。

5) 用户密码加密,例如采用类似MD5没有反向算法且不能解密的加密算法。

6) 对核心页面程序代码实行动态加密管理。

7) 查看系统日志实时监测系统运行状况,定时对数据进行异地备份。

5 结束语

通过项目开发的实际应用表明,做表单验证时服务器程序不能假定客户端程序是正确的而不加检测,这样如果客户端关闭JavaScript就可能造成出错,而如果只做服务器端检测,那么需要提交到服务器端再返回,效率就会大打折扣,并且对于用户极不方便,所以只能客户端和服务器端作两次验证的机制,这样就能够很大程度确保数据的安全。

参考文献:

[1] 丁昊凯网站开发典型模块与实例精讲[M].北京:电子工业出版社,2006.

[2] Payne 从入门到精通[M].赵斌,译.北京:人民邮电出版社,2002.

[3] 彭木根.数据仓库技术与实现[M].北京:电子工业出版社,2002.

上一篇:AOP技术在车险业务系统中的应用 下一篇:一种基于人体测量学的三维人体快速建模方法研...