问题描述
我们正在尝试修复 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 方法规范化的路径