Asp.Net验证控件的疑惑?1、EnableClientScript属性的值由默认的True改为False后,是否不再进行客户端验证而只进行服务器端验证?
2、为何看不到服务器端的验证代码?它是在哪个阶段运行的?
3、若执行了客户端验证,还会执行服务器端验证吗?
4、若服务器端验证总要执行,会通过其他手段绕过这个验证吗?
5、为什么有的文章说“即使已经在客户端上执行了验证,也必须在服务器上执行验证。这允许您通过服务器代码来确定验证状态,并且避免用户避开验证,从而提供了更高的安全性。”,是说除了验证控件外,另外再写验证代码吗?
http://msdn.microsoft.com/zh-cn/library/yb52a4x0(VS.80).aspx

解决方案 »

  1.   

    对数据的验证,一般需要客户端验证跟服务端验证相配合来做。客户端只做数据格式正确性的验证,比如javascript中验证邮箱地址格式是否含有非法字符等,如果格式通过了再提交到服务端进行验证。服务段对数据的合理性进行正确性验证。所以就衍生出了什么验证码识别,模拟cookie等等一系列的问题,为的就是能够模拟这个过程,实现自动登录等效果。
      

  2.   

    谢谢楼上两位,我知道服务器端验证的重要性,只是不清楚“ASP.Net验证控件”的工作过程:
    若验证控件的EnableClientScript属性的值由默认的True改为False后,是否不再进行客户端验证而只进行服务器端验证?若执行的是服务器端验证,为何看不到服务器端的验证代码?它是在哪个阶段运行的?
      

  3.   

    http://www.cnblogs.com/BTQ/archive/2008/09/02/1282197.html
      

  4.   


    非常感谢sp234,再问一下,若代码中检测了Page.IsValid的值,模拟浏览器提交发送数据还能绕过这个验证吗?这点很重要啊~~~
      

  5.   

    经过测试,实践证明:1、不管是否禁用客户端验证,总是要执行服务器端的验证;2、服务器端在执行数据操作前一定要检测 Page.IsValid 的值3、模拟浏览器Post数据不能绕过验证控件的验证。结论:大胆使用“Asp.Net提供的验证控件”,只要验证控件做的到位,不需要再编写另外的服务器端数据正确性检验程序。若有异议,欢迎继续讨论。
      

  6.   


    你能证明你的做法的必须行吗?我的结论我可证明~我们的结论不同吗?Page.IsValid就是服务器端验证啊。
      

  7.   

    哦,光判断IsValid还不行,还需要For this property to return true, all validation server controls in the current validation group must validate successfully. You should check this property only after you have called the Page.Validate method, or set the CausesValidation property to true in the OnServerClick event handler for an ASP.NET server control that initiates form processing. 
      

  8.   


    CausesValidation 自然要设置为true,若说“Page.IsValid就是服务器端验证”,那我们的观点就一致了。
      

  9.   

    在本地进行“验证控件”使用的开发时,可以执行客户端验证,验证成功才会回传页面。但发布到服务器后,就不能执行客户端验证而直接执行服务器端验证了呢?有的说,服务器端需要 aspnet_client 文件夹,可里面的文件从哪里找到,或可下载呢?为何我安装的“Microsoft Visual Studio 10.0”目录下也找不到这些相关文件啊?