发现bug:
手上有一个网站使用的是Layui框架,上线运营之后,发现有人注册了一个“ QQ556677<script>http://域名.com/Jzpu</script>” 的账号,很明显是有人要注入木马后门,会出现这种问题很可能就是注册时没有验证用户名的合法性,因此看了一个layul的官方表单验证文档,官方的form.verify写得还是相当不错的,一起来学习吧!
1、导入相应的layui.css和layui.js的包,在js中申明form
<script type="text/javascript">
layui.use(['form'], function(){
var form = layui.form;
}
</script>
2、需要验证的input,就加上lay-verify="规则名称"
<input type="text" lay-verify="email">
还同时支持多条规则的验证,如下:
<input type="text" lay-verify="required|phone|number">
属性名 | 属性值 | 说明 |
---|---|---|
lay-verify | required(必填项) phone(手机号) email(邮箱) url(网址) number(数字) date(日期) identity(身份证) 自定义值 | 同时支持多条规则的验证,格式:lay-verify="验证A|验证B" 如:lay-verify="required|phone|number" 另外,除了我们内置的校验规则,你还可以给他设定任意的值,比如lay-verify="pass",那么你就需要借助form.verify()方法对pass进行一个校验规则的定义。详见表单验证 |
上表中的required、phone、email、url、number、date、identity是官方内置的规则,我们也可以自定义规则。方法如下:
form.verify({
username: function(value, item){ //value:表单的值、item:表单的DOM对象
if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5\\s·]+$").test(value)){
return '用户名不能有特殊字符';
}
if(/(^\_)|(\__)|(\_+$)/.test(value)){
return '用户名首尾不能出现下划线\'_\'';
}
if(/^\d+\d+\d$/.test(value)){
return '用户名不能全为数字';
}
}
//我们既支持上述函数式的方式,也支持下述数组的形式
//数组的两个值分别代表:[正则匹配、匹配不符时的提示文字]
,pass: [
/^[\S]{6,12}$/
,'密码必须6到12位,且不能出现空格'
]
});
上述代码中,我们自定义了username和pass两种规则,引用规则也很简单,在lay-verify=""里添加即可
<input type="text" lay-verify="required|username" placeholder="请输入用户名">
<input type="password" lay-verify="required|pass" placeholder="请输入密码">
用户名和密码都是必填项,因此要加上required这个内置规则。