我记得在刚接触ASP.NET编程的时候,微软帮助文档就特别强调,不能相信客户端提交的任何数据,我们都要假象客户端提交的数据都是不安全的,所 以我们要对客户端提交的数据进行验证,所以.net里面给我们提供了验证控件,很方便,但是你在看这些控件的使用帮助的时候,微软肯定一样会强调,我们在 前台验证后,还需要服务端验证,为什么呢?估计很多新手会问了,.net里面的验证控件不是服务器控件吗?验证控件确实是服务器端控件,但是你要知道,这些服务器控件仅仅是把客户端验证的功能封装了而已,所以那些验证控件,其实还是客服端验证,而所有客户端验证,都不是真正的最安全的验证方法,我们必须要要进行服务端验证。为什么呢,请接着继续看。
相信作为程序员,都会按照火狐浏览器,如果是经常进行web前端开发的话,肯定离不开火狐浏览器的。
安装好FireBug插件
然后,用快捷键F12,就会弹出FireBug窗口
我写了一个简单的注册登录的功能,用了.net服务器验证控件,对输入进行验证,但是没有在服务端进行验证
首先,我们不填写数据,提交注册按钮,我们知道,肯定提交不了的,如上图
然后按着上面步骤操作,把红框里的代码:
javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(“Button1″, “”, true, “1″, “”, false, false))
删除掉,然后点击提交按钮,你会发现,数据竟然提交成功了,为什么呢?
这就是我上面说的,其实.net的服务器验证控件,其实就是客户端验证,没有进行服务端验证的原因
当我们删除验证事件的时候,自然就不能进行验证了,也就是我要说的主题,绕过了客户端JS验证
后面我再用同样的方法,去掉登录的客户端验证代码,什么都不输入,进行登录,结果是登录成功
互联网上存在很多网站,不管是.net开发的,还是PHP,还是JAVA,如果不进行服务端验证,按这个方法操作,都能绕过客户端验证
其实现在我们很多没有安全意识的程序员,或者新手,都会忽略掉服务端验证,原因之一是,他们完全没有这个意识,即不懂。
再者是有些程序员抱着侥幸的心理,或者说是偷懒,以为客户端验证了,服务端不验证,没事,一般人察觉不出来,可正是他们这种侥幸的心理,从而让他们的网站存在安全隐患。
除了利用火狐浏览器能够绕过客户端JS验证,其实在黑客手里还有很多更加专业的工具,所以对数据进行客户端和服务端验证,非常有必要,也非常重要