美文网首页js css html
安全漏洞:非法的BigDecimal造成系统崩溃

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

作者: 小胖学编程 | 来源:发表于2022-11-30 21:39 被阅读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);
            }
        }
    }
    
    • 我们可以对传入的数据进行一次格式校验,拦截到科学计数法1ex输入。
    • 我们可以将String类型转化为number类型,再转换为BigDecimal类型.

    易现点

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

    .

    相关文章

      网友评论

        本文标题:安全漏洞:非法的BigDecimal造成系统崩溃

        本文链接:https://www.haomeiwen.com/subject/pffjfdtx.html