checkmarx 存储绝对路径遍历

问题描述

我们正在尝试修复 checkmarx 报告的一些问题,我不得不说存储 xxx 串行问题很难找到解决方案。

关于这个,我们有以下代码

PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
entity.setFilePath(org.owasp.encoder.Encode.forJava(rs.getString("FilePath"))
}
rs.close();
ps.close();

return entity;

然后我使用这样的实体:

entity = dao.getEntity();
inputStream = new FileInputStream(entity.getFilePath());

Checkmarx 仍然在 inputSteam 行报告问题,但我已经在返回实体之前对其进行了编码。我该如何解决这样的问题?

解决方法

对文件路径进行输出编码不一定能帮助您防止路径遍历。您的 SAST 解决方案假设来自数据库的数据受到污染,因此降低这种风险的一种方法是替换潜在恶意字符的字符串

if (rs.next()) {
   entity.setFilePath(rs.getString("FilePath").replace("\\",""))
}

另一种方法是只存储文件名(即如果路径是预先确定的)和使用 getCanonicalPath 方法规范化的路径