先来看一段代码:
//x, y, z 都是 int 类型
if (x + y < z) {
}
这段代码是否存在问题呢,可能不仔细或者对数据结构不充分了解的同学就直接这么过了,当然大多数情况下可能这段代码也不会产生问题,但是还是那句话,安全倾向于 “明显没有漏洞”,而不是“没有明显漏洞”,这里的问题是数值类型会溢出,不仅仅会导致程序判断出现误判,严重的话还会影响整个业务,而且难以复现。
完全可以这么写
if(z-x>y){
}
还有类似的数组越界问题也是时常发生,如下
public int test(i){
int [] a={1,2};
return a[i];
}
这里如果i=2即会报错:
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException
而这些只要我们做好入参的限制,完全都是可以规避的。
还有如下:
try { } catch (Exception e){
throw new RuntimeException(hostname + port+"error")
}
有的同学为了方便查找错误直接把出错的信息这么给抛出,一个 Web 应用,异常如果没有良好的包装起来,那么就会把个人信息暴露给客户端,产生信息泄露等问题。