0

我们正在尝试修复 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 行报告问题,但我已经在返回实体之前对其进行了编码。我该如何解决这样的问题?

4

1 回答 1

0

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

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

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

于 2021-06-29T20:26:32.293 回答