首页 > 解决方案 > checkmarx 在静态方法中看不到代码

问题描述

Checkmarx 不理解静态方法。

String journeyId = request.getHeader("JOURNEY_ID");
journeyId = LogUtils.getUserInputText(journeyId);
LOGGER.info("journeyId=" + journeyId);

对于上面的代码,Checkmarx总是抱怨存在Log Forging,因为它认为journeyId是来自用户输入。但LogUtils.getUserInputText唯一允许返回 ascii 文本。但Checkmarx不承认这一点。然后我做了这个测试

String myJourneyId1 = request.getHeader("JOURNEY_ID");
LogUtils logUtils = new LogUtils();
myJourneyId1 = logUtils.getUserInputText(myJourneyId1);
LOGGER.info("myJoruneyId1=" + myJourneyId1);

我没有改变任何东西LogUtils。我只在调用静态方法之前实例化它,现在Checkmarx不再抱怨了。

这是getUserInputText

public static String getUserInputText(final String input) {
        if (StringUtils.isBlank(input)) {
            return "";
        }
        
        return input.replaceAll("[^\\x20-\\x7E]", "\\uFFFD");
    }

getUserInputText 中的内容无关紧要。Checkmarx 抱怨第一个,但没有抱怨第二个。他们正在调用相同的函数。

老实说,我对此感到非常沮丧。浪费了我整个下午来测试为什么我的修复没有解决日志伪造问题。最终我发现这是一个 checkmarx 问题。


更有趣的发现在这里:
如果我将 LogUtils 类移动到另一个依赖项目,无论我是否实例化,Checkmarx 总是抱怨日志伪造问题。

标签: javacheckmarxsecure-codinglog-forging

解决方案


推荐阅读