安全性检验与异常抛出

原创 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;
                   }
                 
         }
       
         问题其实很简单,写出来的目的,只是要让自己印象深刻点,要时刻把自己当成独挡一面的技术人员,那么,安全问题当然就不是小问题啦!
 

抛出异常和捕获异常的区别

抛出异常:如果程序中出现了异常,没有办法将具体的异常打印出来,不做任何处理   捕获异常:如果程序出现了异常,就能够详细的打印是什么原因导致了异常并且能够做出相应的处理,能够显示详细的Log   如果...
  • hbiao68
  • hbiao68
  • 2013年12月04日 10:14
  • 3848

JAVA如何抛出异常

JAVA如何抛出异常  分享| 2011-07-07 13:54mengmeng2xiao | 浏览 49337 次  java 2011-07-07 13:59 ...
  • evilcry2012
  • evilcry2012
  • 2016年04月12日 14:30
  • 3662

抛出和接收异常的顺序

代码编译运行环境:VS2012+Debug+Win32异常(exception)是C++语言引入的错误处理机制。它 采用了统一的方式对程序的运行时错误进行处理,具有标准化、安全和高效的特点。C++为了...
  • K346K346
  • K346K346
  • 2015年12月01日 20:46
  • 1498

【JAVASE】Java同时抛出多个异常

Java抛出多个异常的方法
  • gaodml
  • gaodml
  • 2014年07月07日 22:29
  • 2374

finally 中抛出异常处理

在finally 不要return  main:System.out.println(testExp()); public static String testExp() { ...
  • liyantianmin
  • liyantianmin
  • 2016年11月15日 18:06
  • 777

java异常的捕获与抛出原则

在可能会出现exception的地方,要使用try-catch或者throws或者两者都要。我的判断依据是:如果对可能出现的exception不想被外部(方法的调用者)知道,就在方法内部try-cat...
  • u014251458
  • u014251458
  • 2014年06月28日 20:54
  • 3293

Java try-catch-finally进行异常处理以及throw主动抛出异常

1.try内声明的变量,类似于局部变量,出了try{}语句,就不能被调用 2.finally是可选的。 3.catch语句内部是对异常对象的处理:      >getMessage();  print...
  • u013453970
  • u013453970
  • 2015年08月18日 21:44
  • 4568

关于异常抛出机制

****************try catch使用********************************************************************* tr...
  • u010742414
  • u010742414
  • 2015年04月10日 09:57
  • 1188

java异常——捕获异常+再次抛出异常与异常链

【0】README0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常——捕获异常+再次抛出异常与异常链 的相关知识;【1】捕获异常相关1.1)如果某个...
  • PacosonSWJTU
  • PacosonSWJTU
  • 2015年12月09日 14:37
  • 5720

java异常处理之抛出异常

抛出处理定义一个功能,进行除法运算例如(div(int x,int y))如果除数为0,进行处理。 功能内部不想处理,或者处理不了。就抛出使用throw new Exception(“除数不能为0”)...
  • Code_legend
  • Code_legend
  • 2016年08月13日 22:20
  • 2224
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:安全性检验与异常抛出
举报原因:
原因补充:

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