JS检测表单漏洞

在做表单验证时,我们常常使用的方法是用js获取某一个表单项的值,然后看其值是否为空或者看其内容长度是否为零.如果为空或为零则认为没有输入必填项的值.就弹出出错信息如下图所示:

此时所用的检测代码如下:

if(document.getElementById("searchkey").value==""){
   alert("Please input the search keyword!");
   document.getElementById("searchkey").focus();
   return false;
  }

//注意此时上面的条件换成document.getElementById("searchkey").value.length<0也是可以的

这段代码看似没有什么问题.但从安全角度来考虑的话就会存在问题了.因为如果我没有输入任何数据只是按下多个空格的话,能是可以绕过去的,因为空格也是数据,这样也就是说这个文本框中是有值的而且空格也占位了,这样就是说它的长度也是大于零的.所以上面那段代码只要我在文本框中按下多个空格就必然能跳出下一个检测.这样便绕过了它的检测了.下面是截图:

 

按下回车后显示如下:

 

请注意此时是不是显示的提示与以前不一样了.这说明我们按下空格已经跳过了验证.相信用这种程度来进行验证的网站不在少数.当然了既然要绕过这种验证最简单方法就是直接把源文件拷下来然后把JS代码去除改掉即可,不过这需要掌握一定的语言基础才行.所以这里与大家说下这种方法.按下空格就可以了.现在的很多网站的注册之类要求的东西挺多的.适当用用这招也无防啊.我这里写出来,只是为了提醒自己认后写程序检测时注意这个问题,同时也告诉其他程序员注意一下.好了下面说说解决方法吧

解决方法其实很简单,那就是在进行检测是否为空或为零之前先把得到的值的空格去掉,至于是全部去掉还是只去除前面和后面的空格这就看各人需要了.这里我利用正则表达式来达到这种效果,代码如下:

去除所有空格:  
  str   =   str.replace(//s+/g,"");  
   
  去除两头空格:  
  str   =   str.replace(/^/s+|/s+$/g,"");

效果如下图:

我们按下搜索后跳出提示对话框如下图:

从上面我们看到我们刚刚输入的代码起作用了.把空格全部替换了,这样即使是用户按下空格键也一样会跳出检测说未输入数据,从而达到更好的用户体验度

当然了,这种光JS上的检测对于一个严谨的程序来说是远远不够的.我们还应该在服务器端接受数据时进行检测,这样才能达到严谨的过滤.

作者:独孤剑

我的小站:嘟酷123,欢迎大家与我交流

------------------------------------------------------------------------------

 文章转载请注明出处!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值