首页 > 解决方案 > checkmarx 中的 Java 信任边界冲突

问题描述

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

我有一种从 .DOCX 模板生成 .PDF 文档单词的方法。我正在发送模板 ID 和参数列表及其值作为方法的参数。

我已经尝试清理报告建议之类的输入,但似乎没有任何效果。

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

我收到的来自 checkmarx 的文字如下:

... 第 110 行的方法 createDocumentFromTemplate 从元素参数列表中获取用户输入。此元素的值在未经过适当清理或验证的情况下流经代码,最终存储在服务器端 Session 对象中,在第 182 行的 createDocumentFromTemplate 中。这构成了信任边界冲突。

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

参数对象看起来像这样:

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

任何帮助将非常感激。谢谢!

标签: javaregexsecuritycheckmarxsecure-coding

解决方案


推荐阅读