java - 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}]", "");
}
任何帮助将非常感激。谢谢!
解决方案
推荐阅读
- amazon-web-services - 带有 SSL 证书的 Route53
- azure - Azure 应用服务返回错误 - 错误 403 - 禁止您尝试访问的 Web 应用已阻止您的访问
- r - 根据多个条件替换缺失的数字
- python - 如何通过在 pygame 中传递击键来操作精灵以进行自我游戏?
- php - 将最大大小设置为用户文件管理器 php mysql 的文件夹
- ubuntu - 相互 ping:“请求超时”和“目标主机无法访问”
- python - 使用 Python NaN 错误将 CSV 文件导入 SQL Server
- c# - 如何在表格中排序,从csv文件到文本框的数据?
- python - 如何使标记器识别日期
- spring-boot - 设置结束会话端点