- Struts 2.x权威指南
- 李刚编著
- 716字
- 2022-07-20 11:12:04
5.1.1 为什么需要输入校验
对于一个Web 应用而言,所有的用户数据都是通过浏览器收集的,用户的输入信息是非常复杂的,比如用户操作不熟练,输入出错,硬件设备不正常,网络传输不稳定,甚至有恶意用户的蓄意破坏……这些都有可能导致输入异常。
异常的输入,轻则导致系统非正常中断,重则导致系统崩溃。应用程序必须能正常处理表现层接收的异常数据,通常的做法是遇到异常输入时应用程序直接返回,提示浏览者必须重新输入,也就是将那些异常输入过滤掉。对异常输入的过滤,就是输入校验,也称为数据校验。
类型转换和输入校验是紧密相关的处理,本节先以图4.2所示的页面作为输入页面,如果我们在此页面的4个输入项中执行非正常输入,则可以看到如图5.1所示的页面。
![](https://epubservercos.yuewen.com/1C94E6/3590582303459301/epubprivate/OEBPS/Images/figure_0161_0348.jpg?sign=1739421443-SxDGTtSO6lciIRKabF3ey02tLaeODsop-0-97031868cfac79e0a9a1cd293845b540)
图5.1 非正常输入的结果页面
从图5.1所示的页面中可以看出,浏览者输入的用户名太长了,也许系统仅能允许长度为25的用户名,这个非正常输入肯定会引起底层系统的异常。除此之外,用户输入的年龄是300,这很明显也是一个非常不可思议的年龄(除非他不是人类),生日是3000年1月12日。这些输入都是明显的异常输入,如果应用系统对这些数据进行处理,难免不会引起异常。
注意
在《Writing Secure Code》一书中有一句名言:All Input Is Evil,即所有的输入都是邪恶的!这句话的意思并不是说所有的浏览者都是邪恶的,而是说开发者应该以最坏的打算来面对浏览者的输入,而不是以最好的打算来面对浏览者的输入——只有以这样的态度写出来的应用才是最强壮的。
为了解决上面所列出的问题,必须使用输入校验来过滤这些非法输入。前面已经提到了,输入校验可分为客户端校验和服务器端校验两种。客户端校验和服务器端校验缺一不可。
下面就从两个方面分别来进行输入校验,以期让读者明白为什么客户端校验和服务器校验是必不可少的。