checkmarx中的Java信任边界冲突
我遇到了一些关于checkmarx信任边界违反的问题 我有一个从.DOCX模板生成word of.PDF文档的方法。我正在发送模板id和参数列表及其值作为方法的参数 我已经尝试过像报告建议的那样对输入进行消毒,但似乎没有任何效果 关键参数允许值可以是字母数字字符和点字符。值参数的内容可以是带符号的完整句子等 下面是我所得到的文本: 方法createDocumentFromTemplate位于。。。获取用户 来自元素参数列表的输入。此元素的值在代码中流动,但没有正确地进行转换 已清理或验证,并最终存储在服务器端会话对象中,位于的createDocumentFromTemplate中 第182行,共。。这构成信托 违反边界 报告中标记的代码是方法createDocumentFromTemplate+整个for循环和方法RemovenonalPhanumericValuesLeveDot Parameters对象的外观如下所示:checkmarx中的Java信任边界冲突,java,regex,security,checkmarx,secure-coding,Java,Regex,Security,Checkmarx,Secure Coding,我遇到了一些关于checkmarx信任边界违反的问题 我有一个从.DOCX模板生成word of.PDF文档的方法。我正在发送模板id和参数列表及其值作为方法的参数 我已经尝试过像报告建议的那样对输入进行消毒,但似乎没有任何效果 关键参数允许值可以是字母数字字符和点字符。值参数的内容可以是带符号的完整句子等 下面是我所得到的文本: 方法createDocumentFromTemplate位于。。。获取用户 来自元素参数列表的输入。此元素的值在代码中流动,但没有正确地进行转换 已清理或验证,并最终
@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}]", "");
}
任何帮助都将不胜感激。
谢谢 似乎是假阳性。您需要进行调查以确认。