安全性检验与异常抛出

原创 2007年10月13日 21:48:00
          我一向对这方面都不怎么看重的,觉得技术上掌握了,其他细节当然就不是问题。感谢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;
                   }
                 
         }
       
         问题其实很简单,写出来的目的,只是要让自己印象深刻点,要时刻把自己当成独挡一面的技术人员,那么,安全问题当然就不是小问题啦!
 

异常安全的复制构造函数和拷贝赋值运算符函数

异常安全性问题 异常安全代码 在出现异常的情况下仍然能够正确运行 异常中立 将所有的异常都转发给调用者 永远不要在析构函数、重载运算符函数operator delete(...
  • visionarywind
  • visionarywind
  • 2016-01-10 21:34:12
  • 303

异常类型及版本,抛出IndexOutOfRangeException类型异常,抛出InvalidOperationException类型异常,抛出InvalidOperationException类型异常,抛出InvalidOperationException类型异

  • 2008年12月12日 09:27
  • 63KB
  • 下载

C++ 异常抛出实例

  • 2018年03月12日 16:12
  • 1KB
  • 下载

java中异常的抛出:throw throws

Java中的异常抛出
  • m0_37105443
  • m0_37105443
  • 2017-02-04 21:06:57
  • 1823

java异常处理之抛出异常

抛出处理定义一个功能,进行除法运算例如(div(int x,int y))如果除数为0,进行处理。 功能内部不想处理,或者处理不了。就抛出使用throw new Exception(“除数不能为0”)...
  • Code_legend
  • Code_legend
  • 2016-08-13 22:20:25
  • 2572

Java中异常的抛出原则

主要的是方法重写,即子类继承父类的方法,抛出的异常注意点: 父类没有声明异常,子类也不能 不可抛出原有方法异常类的父类或上层类 抛出的异常类型的数目(类型)不可比原有的方法抛出的还多(不是指个数) i...
  • qq_36258792
  • qq_36258792
  • 2017-06-30 16:58:42
  • 280

Java异常抛出及自定义异常

throw  抛出异常 throws 抛出异常声明 首先自定义异常类(继承Exception类) public class MyException extends Exception {...
  • qq_16255321
  • qq_16255321
  • 2017-01-16 19:36:46
  • 337

子类抛出的异常类型不能比父类抛出的异常类型更宽泛!

子类抛出的异常类型不能比父类抛出的异常类型更宽泛! 是说覆盖父类方法抛出的异常只能是以下情况(比如父类抛出IOEception异常): 1.要和父类方法抛出的异常一致,抛出IOEception异常 2...
  • Java18
  • Java18
  • 2012-05-10 19:01:03
  • 3572

Java异常的捕获和抛出

一、什么时候要考虑异常? 1,判断可能出现异常的地方啊,比如读取一个磁盘上的文件的代码,这里就得加异常,因为读取的时候可能文件被删除了 2.根据实际的业务来捕获异常如:文件读写、数据库连接、线程...
  • foreverhuylee
  • foreverhuylee
  • 2014-01-09 16:42:09
  • 9825
收藏助手
不良信息举报
您举报文章:安全性检验与异常抛出
举报原因:
原因补充:

(最多只允许输入30个字)