checkmarx сохранил абсолютный обход пути

Мы пытаемся исправить некоторые проблемы, о которых сообщает checkmarx, я должен сказать, что проблема с серийным номером Stored 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, но я уже кодирую ее перед возвратом объекта. Как я могу решить такую ​​​​проблему?


person Vincent Chen    schedule 29.06.2021    source источник


Ответы (1)


Выходное кодирование пути к файлу может не обязательно помочь вам предотвратить обход пути. Ваше решение SAST предполагает, что данные из БД испорчены, поэтому один из способов снизить этот риск — заменить строку потенциально вредоносных символов.

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

Другой способ - просто сохранить имя файла (то есть, если путь предопределен) и путь, канонизированный с помощью метода getCanonicalPath.

person securecodeninja    schedule 29.06.2021