checkmarx中的Java信任边界冲突

checkmarx中的Java信任边界冲突,java,regex,security,checkmarx,secure-coding,Java,Regex,Security,Checkmarx,Secure Coding,我遇到了一些关于checkmarx信任边界违反的问题 我有一个从.DOCX模板生成word of.PDF文档的方法。我正在发送模板id和参数列表及其值作为方法的参数 我已经尝试过像报告建议的那样对输入进行消毒,但似乎没有任何效果 关键参数允许值可以是字母数字字符和点字符。值参数的内容可以是带符号的完整句子等 下面是我所得到的文本: 方法createDocumentFromTemplate位于。。。获取用户 来自元素参数列表的输入。此元素的值在代码中流动,但没有正确地进行转换 已清理或验证,并最终

我遇到了一些关于checkmarx信任边界违反的问题

我有一个从.DOCX模板生成word of.PDF文档的方法。我正在发送模板id和参数列表及其值作为方法的参数

我已经尝试过像报告建议的那样对输入进行消毒,但似乎没有任何效果

关键参数允许值可以是字母数字字符和点字符。值参数的内容可以是带符号的完整句子等

下面是我所得到的文本:

方法createDocumentFromTemplate位于。。。获取用户 来自元素参数列表的输入。此元素的值在代码中流动,但没有正确地进行转换 已清理或验证,并最终存储在服务器端会话对象中,位于的createDocumentFromTemplate中 第182行,共。。这构成信托 违反边界

报告中标记的代码是方法createDocumentFromTemplate+整个for循环和方法RemovenonalPhanumericValuesLeveDot

Parameters对象的外观如下所示:

@Data
public class DocumentTemplateParameters {
    private boolean isObject;
    private String key;
    private String value;
}
public byte[] createDocumentFromTemplate(List<DocumentTemplateParameters> parameterList) {


    List<DocumentTemplateParameters> trustedParamList = new ArrayList<>();

    for (DocumentTemplateParameters parameter : parameterList) {
        DocumentTemplateParameters trustedParam = new DocumentTemplateParameters();
        trustedParam.setJeObjekt(parameter.isObject());
        if (parameter.getKey().matches("^[a-zA-Z0-9.]+$")) {
            trustedParam.setKey(parameter.getKey());
        } else {
            trustedParam.setKey(CommonUtil.removeNonAlphanumericValuesLeaveDot(parameter.getKey()));
        }

        trustedParam.setValue(CommonUtil.removeNonLiteralNonNumericalNonPunctuation(parameter.getValue()));
        if (log.isDebugEnabled()) {
            log.debug(LogCleanup.RemoveNewline(trustedParam.getKey()) + ": " + LogCleanup.RemoveNewline(trustedParam.getValue()));
        }

        trustedParamList.add(trustedParam);
    }

    // do something...

    return document;
}
   public static String removeNonAlphanumericValuesLeaveDot(String value) {

        if (value == null) {
            return null;
        }
        // return value.replaceAll("[^\\p{Alnum}\\.]", "");
        return value.replaceAll("[^A-Za-z0-9.]", "");
    }
CheckMarx标记的方法如下所示:

@Data
public class DocumentTemplateParameters {
    private boolean isObject;
    private String key;
    private String value;
}
public byte[] createDocumentFromTemplate(List<DocumentTemplateParameters> parameterList) {


    List<DocumentTemplateParameters> trustedParamList = new ArrayList<>();

    for (DocumentTemplateParameters parameter : parameterList) {
        DocumentTemplateParameters trustedParam = new DocumentTemplateParameters();
        trustedParam.setJeObjekt(parameter.isObject());
        if (parameter.getKey().matches("^[a-zA-Z0-9.]+$")) {
            trustedParam.setKey(parameter.getKey());
        } else {
            trustedParam.setKey(CommonUtil.removeNonAlphanumericValuesLeaveDot(parameter.getKey()));
        }

        trustedParam.setValue(CommonUtil.removeNonLiteralNonNumericalNonPunctuation(parameter.getValue()));
        if (log.isDebugEnabled()) {
            log.debug(LogCleanup.RemoveNewline(trustedParam.getKey()) + ": " + LogCleanup.RemoveNewline(trustedParam.getValue()));
        }

        trustedParamList.add(trustedParam);
    }

    // do something...

    return document;
}
   public static String removeNonAlphanumericValuesLeaveDot(String value) {

        if (value == null) {
            return null;
        }
        // return value.replaceAll("[^\\p{Alnum}\\.]", "");
        return value.replaceAll("[^A-Za-z0-9.]", "");
    }
这是:

public static String removeNonLiteralNonNumericalNonPunctuation(String value) {
    if (value == null) {
        return null;
    }
    return value.replaceAll("[^\\p{L}\\p{Digit}\\p{Space}\\p{Sc}\\p{Punct}]", "");
}
任何帮助都将不胜感激。
谢谢

似乎是假阳性。您需要进行调查以确认。