js css html

安全漏洞:非法的BigDecimal造成系统崩溃

2022-11-30  本文已影响0人  小胖学编程

原理

BigDecimal在JAVA中常用于金额的计算。BigDecimal表面上接收了科学计算法的参数然后进行了一个计算,但是没有对精度做校验。如果用户恶意的传入一个极大值,例如1e11111111e9999,那么会导致BigDecimal计算时间延迟很大,从而造成系统崩溃。

漏洞实践与修复

public class Test {

    public static void main(String[] args) {

        String value = "1e99999999";
        //数据检查
        if (value.contains("1e")) {
            log.error("传入数据错误");
        } else {
            BigDecimal num = new BigDecimal(value);
            Long startTime = System.currentTimeMillis();
            BigDecimal num1 = new BigDecimal(0.00001);
            System.out.println(num1.subtract(num));
            Long endTime = System.currentTimeMillis();
            Long tempTime = (endTime - startTime);
            System.out.println(tempTime);
        }
    }
}

易现点

外部传入的String字符串,直接转化成BigDecimal类型来进行计算。

.

上一篇下一篇

猜你喜欢

热点阅读