有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

checkmarx中的正则表达式Java信任边界冲突

我对checkmarx信任边界违规有一些问题

我有一种方法可以生成单词。来自的PDF文档。DOCX模板。我将发送模板id和参数列表及其值作为方法的参数

我已经尝试过像report suggest那样对输入进行消毒,但似乎没有任何效果

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

下面是我收到的文本:

Method createDocumentFromTemplate at line 110 of ... gets user input from element parameterList. This element’s value flows through the code without being properly sanitized or validated and is eventually stored in the server-side Session object, in createDocumentFromTemplate at line 182 of .. This constitutes a Trust Boundary Violation.

报告中标记的代码是方法createDocumentFromTemplate+whole for loop和方法RemovenonalPhanumericValuesLeveDot

参数对象看起来像这样:

@Data
public class DocumentTemplateParameters {
    private boolean isObject;
    private String key;
    private String value;
}

CheckMarx标记的方法如下所示:

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}]", "");
}

任何帮助都将不胜感激。 谢谢


共 (0) 个答案