安全性检验与异常抛出

本文讨论了在软件开发中输入验证的重要性,特别是针对数字输入的数据类型检查。通过一个具体例子,探讨了如何避免因输入验证不足导致的安全隐患,并提出了解决方案。
          我一向对这方面都不怎么看重的,觉得技术上掌握了,其他细节当然就不是问题。感谢YC师兄,昨天的一番话让我印象深刻,也让我收益菲浅!
         如果自己做的东西很小,不成规模,那还没什么。但是,如果应用范围广,受益群体大,那安全问题就不得不作为一个方面来考虑。今天查了这方面的资料,我的天,还真的有这样的案例。黑客居然可以根据打印在jsp页面上的错误信息攻入服务器~怕怕。
         话题扯远了。
         我之前做的几个页面都没有进行相应的安全性检验,比如说数据类型检验,长度检验,必填项检验。当然了,这些或许不会对系统安全性造成什么损害,但是,对于可能存在的破坏性行为,作为搞技术的,当然要提前杜绝!
         说到数据类型检验,今天这个小小的问题也搞了我一天。
         Hrv检查页面有一输入框,要求用户输入相应的心率值(HeartRate).但是,经过我测试,我随便输入几个字母,竟也能保存!
         FormBean里HeartRate的定义是这样的:        
Private Double heartRate;
         而系统里已经有前人做好的数字检验代码:        
 public static boolean vldNumber(BaseException exp, String value, String arg) {
                   
if (StringUtil.validStr(value) == null)
                            
return true;
                   
try {
                            Double.parseDouble(value);
                   }
 catch (Exception th) {
                            String arg1 
= "只能填写数字";
                            exp.addErrMsg(
new ActionMessage("errors.invalid2", arg, arg1));
                            
return false;
                   }

                   
return true;
         }

         这段代码的作用是检验字符串value的组成元素是不是都是数字。本来已经很简单,拿来就可以用。
         ApplicationException exp = new ApplicationException();
         ValidationUtil.vldNumber(exp,form.getHeartrate().toString(),
"心率");
         问题出来了, 他一直抛出nullPointerException 的异常,怎么回事呢?通过单步调试才发现,原来,当Jsp页面心率输入框输入非数字内容的时候,form.getHeartrate()返回的值居然是NULL,难怪会抛出这样的异常!没办法,只能自己写检验代码!
         首先,数据类型的检验,我直接用了instanceof!非常简单,非常方便!
         其实,一旦发现数据类型不符合,马上用throw抛出我的异常!
代码如下:
         public void vldNumber(Object value) throws ApplicationException
         
{
                   
if(value instanceof Double)
                   
{
                            System.err.println(
"类型正确");
                   }

                   
else
                   
{
                            System.err.println(
"类型不正确");
                            ApplicationException exp 
= new ApplicationException();
                            exp.addErrMsg(
new ActionMessage("errors.invalid2""输入","只能输入数字"));
                            
throw exp;
                   }
                 
         }
       
         问题其实很简单,写出来的目的,只是要让自己印象深刻点,要时刻把自己当成独挡一面的技术人员,那么,安全问题当然就不是小问题啦!
 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值