第4章__Struts_2输入校验_第1页
第4章__Struts_2输入校验_第2页
第4章__Struts_2输入校验_第3页
第4章__Struts_2输入校验_第4页
第4章__Struts_2输入校验_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 Struts 2输入校验 输入校验分为客户端校验和服务器端校验。客户端校验可以过滤掉用户的错误操作,是第一道防线,一般使用JavaScript代码实现。仅有客户端验证还是不够的。攻击者还可以绕过客户端校验直接进行非法输入,这样可能会引起系统的异常,所以必须加上服务器端的验证。但仅有服务器端验证也是不行的,客户的错误操作总是提交到服务器,由服务器端进行验证返回错误信息,这样会加重服务器的负担。所以客户端验证和服务器端验证缺一不可,两者结合起来才可以构建健壮的系统。4.1 输入校验的意义 4.1.1 什么是输入校验 4.1.2 为什么要进行输入校验 4.1.1 什么是输入校验输入校验,从字

2、面上来看好像是指对如输入的密码或者用户名输入错误的校验。其实这个不算输入校验,这个算是业务逻辑的判断了。输入校验是对输入的用户名长度、密码长度、年龄信息等的判断。为了给大家一个感官上的认识,现在打开163邮箱的注册页面,如图4-1所示。4.1.2 为什么要进行输入校验那为什么要进行输入校验呢?使用它有什么好处呢?为了更好地说明,来看下面这个注册页面,如图4-3所示。现在按常规输入用户注册信息,单击“注册”按钮进行注册。页面跳转到注册信息显示页,如图4-4所示。4.2 客户端校验 输入校验分为客户端校验和服务器端校验。客户端校验可以过滤掉用户的错误操作,是第一道防线,一般使用JavaScript

3、代码实现。下面介绍如何通过编写JavaScript来实现客户端校验。4.2.1 正则表达式 客户端校验一般都使用JavaScript来进行输入的校验。JavaScript对输入判断都会使用到正则表达式。正则表达式是字符串处理的利器,功能非常强大。 正则表达式的功能非常强大,通过它可以进行字符串匹配、字符串查找、字符串替换。今天重点介绍字符串的匹配功能,字符串的匹配功能对于输入校验提供了很大的帮助。先看下面简单的正则表达式的示例。 正则表达式:a.b 匹配abb,acb,等 “.“是正则表达式的特殊字符,它的含义是匹配所有的字符还有空格和Tab键。4.2.2 JavaScript中使用正则表达式

4、 下面以一个简单示例来介绍在JavaScript中使用正则表达式进行字符串匹配。程序要求必须输入数字,如果输入的不是数字就弹出提示,代码如下所示。4.2.3 JavaScript完成客户端校验现在为注册示例添加客户端校验功能。首先来看下有哪些输入校验规则。(1)用户名、密码、确认密码必须输入。(2)用户名只能是数字或者字母,长度为620之间。(3)密码,确认密码必须是数字或者字母,长度为620之间。(4)密码和确认密码必须相同。(5)年龄必须为整数而且必须是有效的年龄值。(6)出生日期必须为正确的日期格式如1988-01-03,而且只能是19*年到200*年之间。(7)邮箱地址必须为合法的邮箱

5、地址。4.3 服务器端校验 前面介绍了如何添加客服端校验,但是仅有客户端验证还是不够的。攻击者还可以绕过客户端校验直接进行非法输入,这样可能会引起系统的异常,所以必须加上服务器端的验证。下面来看如何添加服务器端校验。4.3.1 服务器端校验的重要性在上一个示例中为注册页面添加了客户端校验,如果用户输入的信息不合法则无法提交。这时这里要注意的时,使用JavaScript增加客户端校验仅仅使得非法的数据无法提交,但是一些侵入者完全可以采用其他的方式来进行提交。下面来看如何绕过这些JavaScript校验代码?首先可以直接把这个注册页面下载下来,然后通过删除那些JavaScript代码,再修改表单的

6、提交地址。这样的话,就算是输入不合法的信息,客户端校验也起不了作用了,因为连JavaScript代码都被删除掉了。通过一种如此简单的方法就可以绕过这些JavaScript校验代码。那些侵入者很可能使用更加高级的手段来绕过这些JavaScript代码,从而直接提交非法的数据。要避免这种情况就必须添加服务器端校验,服务端校验是整个Web应用中最重要的一道防线。用户使无法直接接触到服务器端代码的,这样的话就算是客户端校验被人绕过,仍然能够通过服务器端校验来阻止用户的非法输入。服务器端校验对于系统的安全性、完整性、健壮性起到了至关重要的作用。那是不是客户端校验根本就没有什么意义了呢?其实不是,因为并不

7、是每个用户都有这样恶意侵入的想法。大部分的用户都是采用的正常的输入,使用客户端校验能够过滤掉用户的错误操作。如果没有客户端校验,那么就算用户只是一个错误的操作,服务器端就要对其输入的信息进行处理并返回错误提示,这样会大大增加服务器端的负载。客户端校验就像是一把锁,能够防君子但是不能防小人。同样客户端校验和服务器端校验是紧密结合的,两者缺一不可。4.3.2 完成服务器端输入校验 现在以上面那个示例的要求来添加服务器端校验。为了能更好地观察服务器端输出的错误信息,暂时不使用客户端的校验代码。这里只是暂时地去掉客户端校验代码,这样才能更好地查看服务端校验的效果。步骤如下所示。 首先新建一个用户注册页

8、。在输入页中除了输入表单外,添加一个标签用来输出actionerror中的错误信息。4.3.3 测试服务器端输入校验现在打开用户注册页,不输入任何数据,单击“提交”按钮,页面将提示按要求进行输入的错误信息,如图4-10所示。因为程序要求输入用户名、密码、确认密码必须输入,所以会提示要求用户进行输入。同样假如输入错误非法的出生日期。如“1000-02-03”时,单击“提交”按钮,页面将会提示要求用户输入有效的出生日期,如图4-11所示。4.3.4 使页面保留提交信息 如果希望表单中能够保留提交的信息,可以在表单的每个元素中添加value属性,并设置值,如下所示。4.3.5 使用addFieldE

9、rror来添加错误信息在前面介绍了使用actionError来保存输入校验错误提示信息。actionError其实就是一个ArrayList,将错误信息保存在actionError中,其实就是保存在一个ArrayList中。前面曾讲过类型转换的错误信息是保存在fieldError中,同样输入校验的错误信息也可以通过addFieldError方法来保存到fieldError中。fieldError和actionError不同的是,fieldError是采用Map结构来存储的,所以都是以键值对来保存信息。那到底是使用fieldError来保存错误提示信息还是使用actionError好呢?这个就依

10、据项目具体要求而定了,如果只是希望在页面中单纯的显示错误提示信息,可以使用actionError来保存错误提示信息;如果希望在相应的文本框中显示错误提示信息,则需要使用fieldError来保存错误提示信息。下面来看如何将错误提示信息保存到fieldError中。首先可以使用addFieldError方法来替代addActionError方法,从而将错误提示信息保存到fieldError中。其中addFieldError方法中包含两个参数,第一个参数用来输入参数名(也可以说是Action中属性名或者说是表单元素中的name属性值),第二个参数用来输入校验错误提示信息。4.3.6 输入校验与类型

11、转换关系 下面来看输入校验和类型转换之间的关系。首先打开上面的注册页面,在年龄文本框中输入一个非法的信息,如“aa”。这时页面将显示错误信息,如图4-16所示。4.4 动态方法调用以及校验动态方法 Struts 2允许在一个Action中包含多个处理逻辑,从而通过调用Action中不同的方法来处理请求。同样对于每个处理逻辑,都可以提供相应的校验方法。下面介绍如何添加动态方法调用以及校验动态方法的使用。4.4.1 动态方法调用Struts 2允许在一个Action中包含多个处理逻辑。例如在同一个表单中,用户通过不同的按钮提交表单时,在Action中调用不同的方法来处理请求。下面来看一个简单示例。

12、首先新建如下的JSP页面。该页面同前面的用户注册页非常类似,不同的是增加了一个删除按钮,代码如下所示。4.4.2 为action元素指定method属性上次通过在“删除”按钮中指定其action属性值为register!deleteUser,从而示将表单提交给配置名为regist的Action的deleteUser方法来处理。发现指定action属性值为register!deleteUser这样的方式比较麻烦。如果能够像“注册”按钮那样直接提交给一个register应该会比较好一点。这个时候要借助于struts.xml配置文件了。在元素中指定action的method属性,则可以让Action

13、类调用指定的方法,代码如下所示。通过这种方法,就好比将一个Action定义成了多个逻辑上的Action,Action类的每个处理方法被映射成一个逻辑Action。4.4.3 校验动态方法前面介绍的在一个Action中包含多个处理逻辑,不同处理逻辑对应不同的方法。那如何定义输入校验来校验这些处理逻辑呢?下面来看一个简单示例,首先将上一示例中的Action中添加一个validate()方法,该方法将在控制台上简单的打印一句话,代码如下所示。public void validate() System.out.println(validate method);这里为了简单测试,并不输入任何的用户信息。直接单击“注册”按钮,在控制台将打印如下语句:validate methodexecute method从控制台打印的语句可以看出,在Action中首先执行了validate()校验方法,然后再执行execute()处理逻辑方法。如果单击“删除”按钮,在控制台将打印如下语句。validate methoddelete method4.4.4 Struts 2输入校验流程为了能够更加了解输入校验的流程,下面来看输入校验的程序流程图,如图4-19所示。4.5 小结 本章首先介绍了什么是输入校验,为什么要进行输入校验。介绍了输入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论