话说客户端与服务器端验证
今天无意当中看了一位同事写的关于登陆页面的验证,由此引发了我对客户端与服务端验证的一点想法,只是个人一点粗略的见解:
一、客户端验证:对天客户端的验证一般都是通过JS来做的,像下面的这样一段代码
/** * 填写用户基本信息 */ $(document).ready(function() { $('#userid').focus(); // 用户名规则 jQuery.validator.addMethod("useridRules", function(value, element) { return this.optional(element)||/^[a-zA-Z0-9\u4e00-\u9fa5|@|._]+$/.test(value); }, "用户名由中文、英文、数字组成!"); // 密码规则 jQuery.validator.addMethod("userpwRules", function(value, element) { return this.optional(element)||/^[A-Za-z0-9]+$/.test(value); }, "密码只能由数字和字母组成!"); // 校验码长度规则 jQuery.validator.addMethod("checkCodeLength", function(value, element,param) { var length = value.length; for (var i = 0; i < value.length; i++) { if (value.charCodeAt(i) > 127) { length++; } } return this.optional(element)||(length == 4); }, "校验码长度为4个字符!"); var validator = $("#userinfoForm").validate({ rules : { userid : { required : true, useridRules : true, remote : { data : { userid : function() { return $('#userid').val(); } }, url : "loginAction!isUserId", type : "post" } }, userpw : { required : true, userpwRules : true, maxlength:50, minlength:6 }, checkCode : { required : true, checkCodeLength : true, minlength:4, remote : { data : { checkCode : function() { return $('#checkCode').val(); } }, url : "loginAction!isCheckCode", type : "post" } } }, messages : { userid : {required:"用户名不能为空!",remote : jQuery.format("用户名不存在,请重新输入!")}, userpw : {required:"密码不能为空!",maxlength:"输入的值在6-50个字符之间!",minlength:"输入的值在6-50个字符之间!"}, checkCode : {required:"验证码不能为空!",minlength:"校验码长度为4个字符!",maxlength:"校验码长度为4个字符!",remote : jQuery.format("验证码输入错误,请重新输入!")} }, errorPlacement : function(error, element) { error.appendTo(element.parent()); }, success : function(label) { label.html(" ").addClass("checked"); }, submitHandler : function(form) { form.submit(); //window.location.href = "loginAction!userLogin?userid=" + $("#userid").val()+"&userpw="+$("#userpw").val()+"&checkCode="+$("#checkCode").val(); } }); });
在对用户录入的信息都只在客户端进行验证,事实表明这个是很不安全的。一般来说,客户端验证不外乎就是在表单提交前使用VBS或JS等对数据进行过滤,这对于大部分的用户来说是可行的。一旦用户设置浏览器禁止运行脚本代码,则所有客户端的验证都会失效。因此,强烈建议在编写网页时在客户端和服务器端都要进行数据验证。
二、服务端验证
public void validateUserLogin() { if(this.userid==null || "".equals(this.userid.trim())){ this.addFieldError("userid", "用户名不能为空 !"); }else{ if(userid.length() < 6 || userid.length() > 60){ this.addFieldError("userid","用户名长度必须为6-60位 !"); } if(!Pattern.compile("^[\u4E00-\u9FA5A-Za-z0-9]+$").matcher(this.userid.trim()).matches()){ this.addFieldError("userid", "用户名格式不正确 !"); } } if(this.userpw==null || "".equals(this.userpw.trim())){ this.addFieldError("userpw", "密码不能为空 !"); }else{ if(userpw.length() < 6 || userpw.length() > 50){ this.addFieldError("userpw","密码长度必须为6-50位 !"); } if(!Pattern.compile("^[A-Za-z0-9]+$").matcher(this.userpw.trim()).matches()){ this.addFieldError("userpw", "密码格式不正确 !"); } } if(this.checkCode==null || "".equals(this.checkCode.trim())){ this.addFieldError("checkCode", "校验码名称不能为空 !"); }else{ if(checkCode.length() != 4){ this.addFieldError("checkCode","校验码长度为4位 !"); } if(!Pattern.compile("^[A-Za-z0-9]+$").matcher(this.checkCode.trim()).matches()){ this.addFieldError("checkCode", "校验码名称不正确 !"); } } }
这是一个通过struts2框架来做的一个验证方法,如果说在客户端的JS验证失效或者是被禁掉之后,这个仍然可以起到一个验证的作用。注意:通过这种方法来做的时候要注意,如果要在进入userLogin这个方法之前做验证,哪么这个验证方法的写法就是:validateUserLogin()
相关推荐
wikiwater 2020-10-27
IdeaElements 2020-08-19
Sophiego 2020-08-16
Kakoola 2020-08-01
Kakoola 2020-07-29
ELEMENTS爱乐冬雨 2020-07-18
ELEMENTS爱乐小超 2020-07-04
ELEMENTS爱乐小超 2020-07-04
Kakoola 2020-06-28
Feastaw 2020-06-18
Wmeng0 2020-06-14
ELEMENTS爱乐冬雨 2020-06-14
云之高水之远 2020-06-14
哈喽elements 2020-06-14
Feastaw 2020-06-11