我一向对这方面都不怎么看重的,觉得技术上掌握了,其他细节当然就不是问题。感谢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;
}
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(), " 心率 " );
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;
}
}
... {
if(value instanceof Double)
...{
System.err.println("类型正确");
}
else
...{
System.err.println("类型不正确");
ApplicationException exp = new ApplicationException();
exp.addErrMsg(new ActionMessage("errors.invalid2", "输入","只能输入数字"));
throw exp;
}
}
问题其实很简单,写出来的目的,只是要让自己印象深刻点,要时刻把自己当成独挡一面的技术人员,那么,安全问题当然就不是小问题啦!