如何写安全的Java Web应用之输入校验(二):不要依赖客户端的校验

    相信很多人都有这样的体验:在某网站注册用户,提交时,弹出一个对话框,提示你身份证号码不对,密码位数不对等信息。这往往就是采用JavaScript进行的客户端输入校验。但是,为了安全,最好不要依赖客户端的输入校验,输入校验应该放到服务器端去做。

   如果一个web应用需要接受客户端的输入,那么往往对输入数据的长度、数值范围、类型等,都需要校验。客户端的校验是把校验放到浏览器里,由浏览器来执行校验代码,这样的代码很容易被忽略。

   客户端校验不能虽然容易被忽略,不安全,但是也有其优点。客户端校验可以增强客户体验,能够提高性能,尽早把不正确的输入阻止,减少由于无效的输入而与服务器端进行的额外交互。总之,客户端校验不能作为安全目的,要保护Web应用不被恶意攻击,需要借助服务器端校验。

    客户端校验,需要注意一下几点:

1、  永远不要相信浏览器:因为浏览器运行在客户的机器上,所以很容易被客户控制,可以被攻击者利用。

2、  JavaScript仅仅用来增强页面效果:JavaScript用来增强展现效果,是很好的技术。但是JavaScript无法保证代码的完整性,所以不要指望JavaScript还增强安全性。

3、  对所有的输入要做服务器端校验:做服务端校验,有以下几个步骤。

a)         识别输入:首先要弄清楚客户端的数据通过什么形式传递到服务器端,是基于URL的参数,还是基于FORM的参数,是隐藏域,还是cookie等。

b)        理解输入:对每一个输入要理解它的作用和形式,对每个输入定义校验器。

c)        创建一系列校验器:对每一种类型的输入,都创建一个校验器,并把所有校验器放到服务器端。如果客户端有校验器,一定要确定服务器端也有相应校验器实现。

你可能感兴趣的:(代码安全(JavaEE),web,java,javascript,服务器,浏览器,url)